下に定義されるようなIインターフェイスを持っている場合としますC#インタフェースの継承
public interface IFunctionality
{
void Method();
}
及び以下に示すように、私は抽象クラスは、このインタフェースを実装する:再び
public abstract class AbstractFunctionality: IFunctionality
{
public void Method()
{
Console.WriteLine("Abstract stuff" + "\n");
}
}
Iが持っています抽象クラスから継承する具体的なクラス:
public class ConcreteFunctionality: AbstractFunctionality
{
public void Method()
{
Console.WriteLine("Concrete stuff" + "\n");
}
}
私は以下の共同de、
ConcreteFunctionality mostDerived = new ConcreteFunctionality();
AbstractFunctionality baseInst = mostDerived;
IFunctionality interfaceInst = mostDerived;
mostDerived.Method();
baseInst.Method();
interfaceInst.Method();
このアイテムの実行後に出力されるのは次のとおりです。
Concrete stuff
Abstract stuff
Abstract stuff
しかし、私はタイプAbstractFunctionality
とIFunctionality
の変数へConcreteFunctionality
の参照を割り当てている私は、ここでやっているように、すべての3例では「コンクリートスタッフ」に出力を期待されているかどうか。
内部的に何が起こっていますか。親切に明確にする。
これは何かを明らかにするかもしれません:http://stackoverflow.com/questions/392721/difference-between-shadowing-and-overriding-in-c – Stormenet
"隠されています、上書きされません" - 覚えておくべき良いマントラ。 (しかし、あなたのコンパイラはこれを言及しているはずです;あなたの警告はフィルタにかけられていますか?) – kmote