类型为内部的受保护成员的可访问性不一致

时间:2012-08-02 15:39:43

标签: c# c#-4.0 inheritance compiler-errors

有人可以解释为什么编译器会给出以下错误吗?

 namespace Sandbox
{
    internal class DataObj { }

    public class A
    {
        protected DataObj _data;
    }
}

这是编译器错误。

  

可访问性不一致:字段类型' Sandbox.DataObj'少了   可以访问字段' Sandbox.A._data'。

只有在不同的程序集中从A派生,我才会期待这个错误。想法?

1 个答案:

答案 0 :(得分:6)

问题是可能从不同程序集中的A派生。这样的类将无法访问该属性的返回类型 因此,声明本身是非法的。

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

这里的基本理念是,创造有时无法使用的东西应该是不可能的。

请注意,这种理念有一些例外;你可以使用在某些情况下无法使用或继承的泛型来制作邪恶的技巧 这是允许的,因为将这些错误移到声明方面会限制太多。