这种方法访问修饰符的目的是什么?

Joh*_*aka 7 c# access-modifiers

请考虑以下代码:

    private string _text = null;
    private string[] _values = null;

    public string Text { get { return _text; } }
    public string[] Values { get { return _values; } }
Run Code Online (Sandbox Code Playgroud)

如果仅仅让公众成员不这样做,这又取得了什么成果呢?

Luc*_*tti 10

通过使用属性而不是公共字段,可以隐藏实现.

如果在某些时候您需要更改Text和Values属性返回的内容,则可以在不更改类的API的情况下更改行为.

此外,这个习惯用法将对暴露数据的外部访问限制为只读.

  • 改述了只读访问的问题,希望这不那么含糊.感谢@AdamHouldsworth! (2认同)

asa*_*yer 6

这是值readonly,虽然我更倾向于这样写:

public string Text { get; private set;}
public string[] Values { get; private set; }
Run Code Online (Sandbox Code Playgroud)

  • 这只会使值只读取到类外的东西. (3认同)
  • 只是澄清一下,因为像readonly这样抛出的单词可能会与`readonly`关键字混淆. (2认同)

Ada*_*rth 5

此代码允许外部实体读取您的值,而您的代码可以在内部修改支持字段.

您可以使用自动属性来简化:

public string Text { get; private set; }
public string[] Values { get; private set; }
Run Code Online (Sandbox Code Playgroud)

使用公共字段,您将无法防止外部修改并同时支持内部修改.

即使你想在外部公开一个字段,我仍然建议将这个东西封装在一个属性中 - 你永远不知道你是否需要在不违反外部合同的情况下在内部支持一些东西(set/get中的自定义代码为你提供了空间做这个).

更不用说大多数数据绑定框架都看不到字段,只看到属性.