属性和私有集

本文关键字:属性 | 更新日期: 2023-09-27 18:20:32

为什么此代码不起作用?

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

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

属性和私有集

Abc属性必须是公共的、受保护的或内部的:

public int Abc { get; private set; }

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

所有类成员(包括属性)的默认可访问性为private;请参阅辅助功能级别。set之前的private是多余的,因此出现错误。您的代码在语义上等效于以下内容:

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

当属性更容易访问时,只需要为set访问器指定private访问修饰符;例如(常见场景):

class Test
{
    public int Abc { get; private set; }
}
属性的默认访问修饰符是私有的,就像类的任何其他成员一样。如果希望降低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; }
}