我想创建一个内部自动属性:
internal bool IP { get; protected internal set; }
我认为可以使设置器
protected
或protected internal
- 但我总是收到错误可访问性修饰符必须比属性更具限制性。不是这样的吗? Private
在这里对我没有帮助。
编辑:
问题是:如何实现具有内部 getter 和受保护 setter 的自动属性?
实际上是
protected
或internal
,而不是和。同一程序集中的派生类和类型都可以访问它。认为 protected internal
意味着只能由同一程序集中的派生类访问是一种常见的误解。FamilyAndAssembly:比受保护或内部更具限制性
因此,您的
protected internal
setter 比
internal
整体属性的限制要少。你能做的是:protected internal bool IP { internal get; set; }
但是你的 setter 比 getter 受到的限制要少,这很奇怪......
另一个(有些等效)替代方案是:
internal bool IP { get; set; }
protected void SetIP(bool ip)
{
this.IP = ip;
}
protected internal bool IP { get; protected set; }
protected internal
比
protected
或 internal
限制更少,因为它允许其子类 (protected
) 和同一程序集中的任何内容 (internal
) 访问某些内容。
Internal 比 protected 更具限制性:因为受保护的东西可以在程序集外部看到(通过子类)。
编译器表示,当整个
set
属性是内部的(即在程序集外部不可见)时,说
IP
受保护(即对程序集外部的子类可见)是没有意义的。