2

OOPで説明されている機能/トピックの1つは、仮想メンバーです。私は次のような声明を見ています:

仮想メンバーは実行時型でディスパッチします

それは、仮想メソッドが、受け入れている、またはかなり可変のタイプを処理しているオブジェクトのタイプに依存していることを意味しますか?

訂正やコメントをいただければ幸いです。

ありがとう、アミット

4

1 に答える 1

7

いいえ。メソッドが受け入れるパラメーターとは関係ありません。これらは各実装で同じである必要があるためです。これは、メソッドが呼び出されているタイプに基づいて、実行時に仮想メソッドが解決されることを意味します。このことを考慮:

public class Parent
{
    public virtual string SayHi()
    {
        return "Hi!";
    }
}

public class NiceChild : Parent
{
    public override string SayHi()
    {
        return "Hello World!";
    }
}

public class MeanChild : Parent
{
    public override string SayHi()
    { 
        return "You suck!";
    }
}

これで、メソッドができました。

public void PrintHi(Parent instance)
{
    Console.WriteLine(instance.SayHi());
}

そのメソッドを3つの方法のいずれかで呼び出すことができますが、上記のメソッドだけが表示された場合は、実行時まで結果がわかりません。

PrintHi(new Parent()); // Hi
PrintHi(new NiceChild()); // Hello World!
PrintHi(new MeanChild()); // You suck!
于 2012-09-27T01:56:50.843 に答える