看到这个代码:为什么不能从内部类继承公共类?
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#语言具有防止这种情况的可见性保护层。
内部类只能从定义它们的程序集中访问。当公共类a从内部类继承时实际上试图公开内部类。
为了避免在公共类中封装内部类。
C#设计原理。派生类应至少具有与父类相同的可访问性。在你的情况下,它不是不允许的。看看Eric Lippert对此的看法deriving public class from an internal class
http://blogs.msdn.com/b/ericlippert/archive/2012/11/13/why-is-deriving-a-public-class-from-an -internal-class-illegal.aspx – SLaks
@SLaks:您应该将其作为答案发布。 – Joey