tan*_*ius 31 c# access-modifiers
我想创建一个内部自动属性:
internal bool IP { get; protected internal set; }
Run Code Online (Sandbox Code Playgroud)
我认为可以制作setter protected或protected internal- 但我总是得到错误的accessibility修饰符必须比属性更具限制性.不是这样的吗?Private这里没有帮助我.
编辑:
问题是:如何使用内部getter和受保护的setter实现自动属性?
Meh*_*ari 50
这是有效protected或internal不和.这是访问都在同一装配派生类和类型.这是一种常见的误解,认为protected internal只能在同一个程序集中的派生类中访问它.
Jon*_*eet 29
在.NET级别,有两个相似但不同的访问级别:
C#中的"protected internal"表示FamilyOrAssembly; FamilyAndAssembly没有修饰符.
因此,您的protected internalsetter比internal整体属性的限制更少.你能做的是:
protected internal bool IP { internal get; set; }
Run Code Online (Sandbox Code Playgroud)
但是你的二传手比你的吸气剂受限制更少,这很奇怪......
另一种(有些相同的)替代方案是:
internal bool IP { get; set; }
protected void SetIP(bool ip)
{
this.IP = ip;
}
Run Code Online (Sandbox Code Playgroud)
我会考虑这种作弊行为,因为Eric Lippert本人就是这样,但他写了一篇很好的博客文章来考虑这个问题.
最终,他的回答与这里的海报大致相同,但他在语言的设计和这些功能的实现背后给出了一些有趣的推理.
考虑到Jon Skeet提到的内容(以及user59808的评论),这不会达到预期的效果吗?
protected internal bool IP { get; protected set; }