2013-07-14 137 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從內部類繼承時實際上試圖公開內部類。

爲了避免在公共類中封裝內部類。