有人可以解释为什么编译器会给出以下错误吗?
namespace Sandbox
{
internal class DataObj { }
public class A
{
protected DataObj _data;
}
}
这是编译器错误。
可访问性不一致:字段类型' Sandbox.DataObj'少了 可以访问字段' Sandbox.A._data'。
只有在不同的程序集中从A派生,我才会期待这个错误。想法?
答案 0 :(得分:6)
问题是可能从不同程序集中的A
派生。这样的类将无法访问该属性的返回类型
因此,声明本身是非法的。
换句话说,这个错误发生在声明方,而不是消费方。
这里的基本理念是,创造有时无法使用的东西应该是不可能的。
请注意,这种理念有一些例外;你可以使用在某些情况下无法使用或继承的泛型来制作邪恶的技巧 这是允许的,因为将这些错误移到声明方面会限制太多。