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