我想创建一个内部自动属性:
internal bool IP { get; protected internal set; }
我认为这将有可能使二传手protected
或protected internal
-但我总是得到错误可访问性修饰符必须比属性更严格 。 是不是这样呢? Private
并不能帮助我,在这里。
编辑:
现在的问题是:如何实现一个自动性能与内部getter和保护setter方法?
我想创建一个内部自动属性:
internal bool IP { get; protected internal set; }
我认为这将有可能使二传手protected
或protected internal
-但我总是得到错误可访问性修饰符必须比属性更严格 。 是不是这样呢? Private
并不能帮助我,在这里。
编辑:
现在的问题是:如何实现一个自动性能与内部getter和保护setter方法?
它有效地protected
或internal
,不和 。 这是双方在同一装配派生类和类型的访问。 这是一个普遍的误解,认为protected internal
只在同一装配派生类可及的手段。
在.NET水平,有两个相似,但不同的访问级别:
在C#“被保护的内部”是指FamilyOrAssembly; 没有修饰符FamilyAndAssembly。
所以,你的protected internal
的setter比限制较少的internal
整体性能。 你可以做的是:
protected internal bool IP { internal get; set; }
但是,那么你的二传手比你的getter,它是奇数较少受限制...
另一个(有点当量)替代方案是:
internal bool IP { get; set; }
protected void SetIP(bool ip)
{
this.IP = ip;
}
我认为这个作弊,因为埃里克利珀是SO自己,但他写了一个很好的博客贴子,认为这个问题。
为什么我不能访问受保护的成员从派生类,第三部分
最终,他的回答是大致相同这里的海报中给出的,但他的广告语言的和DESGIN这些功能的实现背后的一些有趣的推理。
考虑什么乔恩斯基特提到的(和user59808的评论),就不会这样达到预期的效果?
protected internal bool IP { get; protected set; }
protected internal
限制较少比任何protected
或internal
,因为它同时允许它的子类( protected
),以及任何在同一组件( internal
)访问的东西。
在相同的组件类可见受保护的内部装置,或从含有类派生的类 - 换句话说,它是那些满足内部要求或受保护的要求,而不是与可见。 没有任何意义的保护访问修饰符和内部用这种方式。
内部保护来保护或内部,而不是保护和内部。 因此,范围仅限于同一大会或派生类,不一定都。
可访问性修饰符必须比属性更严格
内部是更限制性的该受保护:因为保护的东西可以看出(由子类)的组件的外部。
编译器说,有一个在说,没有意义的set
保护(子类的装配外即可见),当整个IP
属性是内部(即装配外部不可见)。