非对称访问器可访问性(C#) - 为什么?

时间:2011-08-29 20:50:02

标签: c# access-modifiers

根据MSDN中的this页面,事实证明特定访问者的可访问性必须比索引器和属性本身更具限制性。

现在,我了解其含义以及其他一些案例(请参阅C# - Improving encapsulation of property in this example?ERROR: the accessibility modifier of the set accessor must be more restrictive than the property or indexerWhy is internal protected not more restrictive than internal?等问题。)

我无法理解(这里的问题是)......是否有任何理由强制执行此操作?

对我来说,做这样的事情有什么不对,这一点并不明显:

// THIS IS WRONG -- I want this to be set by this class and its derivated
protected MyPropertyType MyProperty 
{ 
    get; // this is protected, by the accessibility of the property
    protected set; // this is wrong -- why?
}

我认为这是一个问题,答案可能是如此明显,一旦我得到答案,我会感到非常愚蠢...但我无法找到它,只是无法自己得到它。所以...随意开火!

1 个答案:

答案 0 :(得分:4)

  

我无法理解(这里的问题是)......是否有任何理由强制执行此操作?

我怀疑这是为了清楚。你的语法:

protected MyPropertyType MyProperty 
{ 
    get;
    protected set;
}

实际上,与未指定setter的可访问性相同,即:

protected MyPropertyType MyProperty 
{ 
    get;
    set;
}

但是,在查看代码时,会出现您打算限制可访问性。让编译器强制要求特定访问者需要更严格的可访问性,可以通过减少冗余来强制简化代码,从而减少错误的总数。