如何为属性创建公共getter和私有setter?以下是否正确?
public String Password
{
set { this._password = value; }
}
private String Password
{
get { return this._password; }
}
答案 0 :(得分:81)
是的,即使使用自动属性也是如此。我经常使用:
public int MyProperty { get; private set; }
答案 1 :(得分:11)
是的,从C#2.0开始,您可以为getter和属性的setter指定不同的访问级别。
但是您的语法错误:您应该将它们声明为同一属性的一部分。只需使用private
标记要限制的那个。例如:
public String Password
{
private get { return this._password; }
set { this._password = value; }
}
答案 2 :(得分:3)
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
或者您可以使用自动实现的属性:
public String Password { get; private set; }
答案 3 :(得分:2)
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
get和set方法通常是 与其他方法没什么不同。他们 可以执行任何程序逻辑,抛出 例外,被覆盖,是 使用允许的任何修饰符声明 编程语言。
编辑: MSDN引用只是为了澄清为什么geter和setter可以有不同的访问mdofiers,@Cody Gray提出的好点:
是的,属性可以执行程序 逻辑和抛出异常。但是他们 不应该。属性旨在 是非常轻量级的方法, 与访问字段相当。该 程序员应该期望能够 使用它们就像没有它们一样 任何明显的表现 影响。太沉重了 强烈建议不要使用程序逻辑。 虽然setter可以抛出异常 如果有必要,吸气者应该差不多 永远不会抛出异常
答案 4 :(得分:2)
public string Password { get; private set; }
答案 5 :(得分:0)
获得一台挖掘机'徽章,并使答案保持最新 - 仅由get-only属性
封装的readonly字段private readonly int myVal;
public int MyVal get { return myVal; }
现在可能(从C#6.0开始)缩短为
public int MyVal { get; }