属性和私有集

时间:2012-01-15 15:10:53

标签: c# properties private

为什么这段代码不起作用?

class Test
{
    int Abc { private set; get; }
}

属性的默认访问修饰符是什么?

3 个答案:

答案 0 :(得分:4)

Abc财产必须是公开的,受保护的或内部的:

public int Abc { get; private set; }

在你的情况下,属性是私有的(因为你没有指定访问修饰符)所以它已经是私有集。你不能在当前类之外修改它的值,所以在这种情况下声明私有的setter是没有意义的。

答案 1 :(得分:3)

属性的默认访问修饰符是私有的,就像类的任何其他成员一样。如果您希望使得setter不易访问,您需要首先使该属性更容易访问,然后对setter进行限制。

class Test
{
    public int Abc1 { private set; get; }
    protected  int Abc2 { private set; get; }
    internal int Abc3 { private set; get; }
    protected internal int Abc4 { private set; get; }
}

答案 2 :(得分:3)

所有类成员(包括属性)的默认可访问性为private;见Accessibility Levelsprivate之前的set是多余的,因此是错误。您的代码在语义上等同于以下内容:

class Test
{
    int Abc { get; set; }
}

当属性更易于访问时,您只需为private访问者指定set访问修饰符;例如(常见情况):

class Test
{
    public int Abc { get; private set; }
}