Mat*_*zen 10 c# access-modifiers
我知道错误"set访问器的可访问性修饰符必须比属性或索引器更具限制性".我也知道解决方案.只是不在这个非常具体的情况下.
考虑这个例子:
internal virtual bool IsFocused
{
get
{
return isFocused;
}
protected set
{
isFocused = value;
}
}
private bool isFocused;
Run Code Online (Sandbox Code Playgroud)
它显示错误.我只是不知道为什么.如何"保护"不比内部更容易获得?这个问题的解决方案是什么?我试着改为"内部保护"而没有运气.
事实证明,protected
是更比访问internal
.回想一下,这internal
意味着"在这个程序集之外不可见"(通过InternalsVisibleTo
访问除外,这internal
看起来像public
),而protected
对所有子类都是可见的.
@bobbymcr在他的分析中是完全正确的.解决方案是将财产标记为internal protected
.在C#中,这意味着派生类和当前程序集中的所有类都可以访问它.
如果你internal protected
使用accessor方法 - 这意味着派生类可以访问它.但整个属性不是,这会导致错误.如果您将整个属性标记为internal protected
和访问方法protected
- 一切都很好.
internal protected virtual bool IsFocused
{
get
{
return isFocused;
}
protected set
{
isFocused = value;
}
}
private bool isFocused;
Run Code Online (Sandbox Code Playgroud)
其他选择是引入protected
将在setter中调用的方法.然后,您可以将整个属性标记为internal
并允许仅覆盖该方法.
protected
允许继承类访问它,而internal
不允许 -internal
限制对程序集本身的访问 - 请参阅http://msdn.microsoft.com/en-us/library/7c5ka91b%28v=vs.80%29.aspx