是否可以在C#中使用同名的公共getter和私有setter?

时间:2011-05-21 15:00:43

标签: c# properties

如何为属性创建公共getter和私有setter?以下是否正确?

public String Password
{
    set { this._password = value; }
}

private String Password
{
    get { return this._password; }
}

6 个答案:

答案 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; }
}

MSDN:

  

get和set方法通常是   与其他方法没什么不同。他们   可以执行任何程序逻辑,抛出   例外,被覆盖,是   使用允许的任何修饰符声明   编程语言。

编辑: MSDN引用只是为了澄清为什么geter和setter可以有不同的访问mdofiers,@Cody Gray提出的好点:

  

是的,属性可以执行程序   逻辑和抛出异常。但是他们   不应该。属性旨在   是非常轻量级的方法,   与访问字段相当。该   程序员应该期望能够   使用它们就像没有它们一样   任何明显的表现   影响。太沉重了   强烈建议不要使用程序逻辑。   虽然setter可以抛出异常   如果有必要,吸气者应该差不多   永远不会抛出异常

答案 4 :(得分:2)

public string Password { get; private set; }

答案 5 :(得分:0)

获得一台挖掘机&#​​39;徽章,并使答案保持最新 - 仅由get-only属性

封装的readonly字段
private readonly int myVal;
public int MyVal get { return myVal; }

现在可能(从C#6.0开始)缩短为

public int MyVal { get; }