2013-07-14 91 views
4

看到这个代码:为什么不能从内部类继承公共类?

internal class c 
{ 
    private int d; 
} 

public class a : c 
{ 
    private int b; 
} 

为什么我不能从一个内部类继承公共类?为什么编译器有这种行为?

+5

http://blogs.msdn.com/b/ericlippert/archive/2012/11/13/why-is-deriving-a-public-class-from-an -internal-class-illegal.aspx – SLaks

+3

@SLaks:您应该将其作为答案发布。 – Joey

回答

7

因为公共类在当前程序集外部是可见的,而内部程序集不是。当从一个班级派生时,只有限制了的可见性,因为在你的情况下,它会使c的实现可用于你的程序集之外的消费者,这种做法首先破坏了课程内部的目的。

可以但是,使用组合而不是继承。

2

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

C#语言具有防止这种情况的可见性保护层。

2

内部类只能从定义它们的程序集中访问。当公共类a从内部类继承时实际上试图公开内部类。

为了避免在公共类中封装内部类。