如果我想将我的属性设置在一个私有类中,那么应该只能在这个类中使用和设置这个属性,更好的方法是什么?这个
public string Name { private get; private set }
或者
private string Name { get; set }
嗯,还有
private string Name { private get; private set }
如果我想将我的属性设置在一个私有类中,那么应该只能在这个类中使用和设置这个属性,更好的方法是什么?这个
public string Name { private get; private set }
或者
private string Name { get; set }
嗯,还有
private string Name { private get; private set }
值得注意的是,最初,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; }
(就此而言,您不能拥有自动属性,并且总是必须自己写入和写入支持字段,但我们将忽略这一点,因为这样我们会有更短的示例)。
对两者进行不同的访问通常很有用,通常是比 getter 更具限制性的 setter,等等
public string Name { get; private set; }
被介绍了。
现在,通过扩展,这似乎是合乎逻辑的,可以允许:
public string Name { private get; private set; }
private string Name { private get; private set; }
然而,这两个表达的是什么?
第二个还不错,只是不必要的重复。尽管如此,很可能是一些混乱的想法让我们到达了那里(很可能是不完整的重构)。好的代码就像让计算机做某事一样表达你正在做的事情(如果有的话,更是如此),最好让它清楚地表达出来。
因此,如果您最终得到类似的结果,{ private get; private set; }
那么可能值得再次查看并考虑您在这里真正想说的内容。万岁,因为它是一个编译器错误。
第一种情况更糟。它说“这个属性是公共的,除了 setter 是私有的,getter 是私有的”。这也不例外,“就是这件事,除了一直”不是任何事情的真实表达。加倍欢呼编译器不让我们这样做。
你试过编译你的例子吗?只有中间的会翻译。
如果要指定额外的可访问性级别关键字,则只能在其中一个访问器(getter/setter)上执行,并且访问器的该级别必须比整个属性的可访问性更具限制性。
在这里您可以看到规则:限制访问器可访问性
public string Name { get; private set; }
这就是我认为你想要做的。
除非您只想让您的班级看到它,否则在财产公开时尝试将其设为私有是没有意义的。在这种情况下,您应该使用:
private string Name { get; set; }
更新:在第二次阅读时,您肯定想要第二个示例。
对于私有成员,您不需要定义访问器。只需这样做:
private string _name;
更好的方法取决于你想要什么:
public string Name { private get; private set }
该属性是,public
但除了类本身之外,没有人可以读取或写入它。那是完全没用的,所以使用 just
private string Name { get; set }
。
一般来说,如果您将属性视为几种方法(实际上是)
private string get_Name() { }
private string set_Name(value) { }
我希望,有可能将该标识符应用于属性的原因get/set
变得显而易见。
好像你想要
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
这将允许您访问private string Name
.