为什么不能从内部类继承公共类?

时间:2013-07-14 11:45:14

标签: c#

请参阅此代码:

internal class c 
{
    private int d;
}

public class a : c
{
    private int b;
}

为什么我不能从内部类继承公共类?为什么编译器会出现这种行为?

4 个答案:

答案 0 :(得分:6)

因为公共类在当前程序集之外可见,而内部程序集则不可见。从类中派生时,您只能进一步限制可见性,因为在您的情况下,它会使c的实现可用于程序集之外的消费者,这会破坏创建类的目的内部首先。

可以使用合成而不是继承。

答案 1 :(得分:2)

C#设计原则。派生类应至少具有与父类相同的可访问性。在你的情况下,因此不允许。看看Eric Lippert对此deriving public class from an internal class

的看法

答案 2 :(得分:1)

因为“公共课”比“内部课”更“可见”。

C#语言具有防止此功能的可见性保护层。

答案 3 :(得分:1)

只能从定义它们的程序集中访问内部类。当公共类继承自内部类时,会尝试将内部类公开。

为避免这种情况,请在公共类中封装内部类。