请参阅此代码:
internal class c
{
private int d;
}
public class a : c
{
private int b;
}
为什么我不能从内部类继承公共类?为什么编译器会有这种行为?
请参阅此代码:
internal class c
{
private int d;
}
public class a : c
{
private int b;
}
为什么我不能从内部类继承公共类?为什么编译器会有这种行为?
因为公共类将在当前程序集之外可见,而内部类则不可见。当从一个类派生时,你只能进一步限制可见性,因为在你的情况下,它会使c
你的程序集之外的消费者可以使用实现,这违背了首先使类成为内部的目的。
不过,您可以使用组合而不是继承。
C#设计原则。派生类至少应具有与父类相同的可访问性。在您的情况下,因此不允许这样做。看看 Eric Lippert 对这个从内部类派生的公共类的看法
因为“公共类”比“内部类”更“可见”。
C# 语言具有防止这种情况的可见性保护层。
内部类只能从定义它们的程序集中访问。当公共类a从内部类继承时,实际上试图使内部类公开。
为了避免这种情况,将内部类封装在公共类中。