为什么这段代码不起作用?
class Test
{
int Abc { private set; get; }
}
属性的默认访问修饰符是什么?
答案 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 Levels。 private
之前的set
是多余的,因此是错误。您的代码在语义上等同于以下内容:
class Test
{
int Abc { get; set; }
}
当属性更易于访问时,您只需为private
访问者指定set
访问修饰符;例如(常见情况):
class Test
{
public int Abc { get; private set; }
}