2012-08-02 50 views
2

任何人都可以解释为什么编译器会给出以下错误吗?类型为内部的受保护成员的不一致可访问性

namespace Sandbox 
{ 
    internal class DataObj { } 

    public class A 
    { 
     protected DataObj _data; 
    } 
} 

这是编译器错误。

不一致的可访问性:字段类型'Sandbox.DataObj'比字段'Sandbox.A._data'更少可用 。

只要我在不同的程序集中从A派生出来,我会期待这个错误。思考?

+0

可能的重复[为什么我得到“不一致的可访问性:属性类型xxx ...”?](http://stackoverflow.com/questions/10834018/why-im-getting-inconsistent-accessibility-property-型-XXX) – dash 2012-08-02 15:45:17

回答

6

的问题是,被是可能A在不同的组件获得。这样的类将无法访问该属性的返回类型。
因此,该声明本身是非法的。

换句话说,这个错误发生在声明端,而不是消费端。

这里的基本哲学是,应该不可能创建某些有时不可能使用的东西。

请注意,这种理念有一些例外;你可以用一些不可能在某些情况下使用或继承的泛型来做恶作剧。
这是允许的,因为将这些错误移动到声明端会太严格。