2

谁能解释为什么编译器会给出以下错误?

 namespace Sandbox
{
    internal class DataObj { }

    public class A
    {
        protected DataObj _data;
    }
}

这是编译器错误。

可访问性不一致:字段类型“Sandbox.DataObj”的可访问性低于字段“Sandbox.A._data”。

仅当我从不同程序集中的 A 派生时,我才会预期此错误。想法?

4

1 回答 1

6

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

也就是说,这个错误发生在声明端,而不是消费端。

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

请注意,这种哲学有一些例外;您可以使用在某些情况下无法使用或继承的泛型进行恶作剧。
这是允许的,因为将这些错误移到声明端会过于严格。

于 2012-08-02T15:43:28.590 回答