假設如果我有一個接口,定義如下:C#接口繼承到抽象類
public interface IFunctionality
{
void Method();
}
和我實現該接口用於一個抽象類,如下所示:
public abstract class AbstractFunctionality: IFunctionality
{
public void Method()
{
Console.WriteLine("Abstract stuff" + "\n");
}
}
再次
我有一個具體類繼承抽象類如下:
public class ConcreteFunctionality: AbstractFunctionality
{
public void Method()
{
Console.WriteLine("Concrete stuff" + "\n");
}
}
現在我有以下的co de,
ConcreteFunctionality mostDerived = new ConcreteFunctionality();
AbstractFunctionality baseInst = mostDerived;
IFunctionality interfaceInst = mostDerived;
mostDerived.Method();
baseInst.Method();
interfaceInst.Method();
執行這個東西后我得到的輸出如下。
Concrete stuff
Abstract stuff
Abstract stuff
但我一直期待的輸出爲「具體的東西」在所有的三種情況是什麼,我這裏做的是分配的ConcreteFunctionality
到AbstractFunctionality
類型和IFunctionality
的變量的引用。
內部發生了什麼。請澄清。
這可能會清除一些東西:http://stackoverflow.com/questions/392721/difference-between-shadowing-and-overriding-in-c – Stormenet
「這是隱藏的,沒有被覆蓋」 - 一個很好的口號要記住。 (但是你的編譯器應該提到這個;你是否已經過濾了你的警告?) – kmote