property:私有方法还是私有get/set?

sil*_*lla 1 .net c# properties

如果我想在Class private中设置我的属性,那么应该只能在这个类中使用和设置这个属性,更好的方法是什么?这个

public string Name { private get; private set }
Run Code Online (Sandbox Code Playgroud)

要么

private string Name { get; set }
Run Code Online (Sandbox Code Playgroud)

嗯,还有

private string Name { private get; private set }
Run Code Online (Sandbox Code Playgroud)

Jon*_*nna 14

值得注意的是,最初,C#不会让你在getter或setter上设置不同的访问,所以唯一可能的选择是:

public string Name { get; set; }
protected internal string Name { get; set; }
internal string Name { get; set; }
protected string Name { get; set; }
private string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

(就此而言,你不能拥有自动属性,并且总是必须自己写入支持字段和从支持字段写入,但我们将忽略这一点,因为我们将以这种方式使用更短的示例).

对两者进行不同的访问通常很有用,通常是比getter更严格的setter,所以喜欢

public string Name { get; private set; }
Run Code Online (Sandbox Code Playgroud)

被介绍了.

现在,通过扩展,允许以下内容似乎合乎逻辑:

public string Name { private get; private set; }
private string Name { private get; private set; }
Run Code Online (Sandbox Code Playgroud)

但是,这两个表达的是什么?

第二个不是太糟糕,它只是不必要的重复.尽管如此,很有可能是一些困惑的想法让我们在那里(很可能是一个不完整的重构).良好的代码与表达你正在做的事情同样重要,因为让计算机做某事(如果有的话,更多的话),更好地表达清楚.

因此,如果你最终得到喜欢的{ private get; private set; }话,那么再次考虑并考虑你真正想在这里说些什么可能是值得的.Hurray因为它是一个编译器错误.

第一种情况甚至更糟.它说"这个属性是公共的,除了私有的setter和私有的getter".这不是一个例外,"它就是这个,除了一直以来"并不是真正的表达.双重欢呼编译器不要让我们这样做.


Jep*_*sen 6

你有没有尝试编译你的例子?只有中间人会翻译.

如果要指定额外的辅助功能级别关键字,则只能在其中一个访问器(getter/setter)上执行此操作,并且访问者的该级别必须比整个属性的可访问性更具限制性.

在这里,您可以看到规则:限制访问者可访问性