看到這個代碼:爲什麼不能從內部類繼承公共類?
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