C# – 在这个例子中改进了属性的封装?
我知道错误“set访问器的可访问性修饰符必须比属性或索引器更具限制性”。 我也知道解决方案。 只是不在这个非常具体的情况下。
考虑这个例子:
internal virtual bool IsFocused { get { return isFocused; } protected set { isFocused = value; } } private bool isFocused;
它显示错误。 我只是不知道为什么。 “保护”如何不比内部更容易获得? 这个问题的解决方案是什么? 我试着改为“内部保护”而没有运气。
protected
允许inherting类访问它而internal
不访问 – internal
限制对程序集本身的访问 – 请参阅https://msdn.microsoft.com/en-us/library/7c5ka91b%28v=vs.80%29.aspx
事实certificate, protected
比internal
更容易访问。 回想一下, internal
意味着“在此程序集之外不可见”(除非通过InternalsVisibleTo
访问,这使得internal
看起来像public
),而protected
表示对所有子类可见。
@bobbymcr在他的分析中是完全正确的。 解决方案是将财产标记为internal protected
。 在C#中,这意味着派生类和当前程序集中的所有类都可以访问它。
如果将internal protected
为accessor方法 – 这意味着派生类可以访问它。 但整个属性不是,这会导致错误。 如果您将整个属性标记为internal protected
和访问方法 – 一切都很好。
internal protected virtual bool IsFocused { get { return isFocused; } protected set { isFocused = value; } } private bool isFocused;
其他选择是引入将在setter中调用的protected
方法。 然后,您可以将整个属性标记为internal
属性,并允许仅覆盖该方法。
上述就是C#学习教程:C# – 在这个例子中改进了属性的封装?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033833.html