0

これが C# で許可されているかどうかはわかりませんが、以前に他の言語で行ったことがあると確信しています。

ParentChild0を持つクラス と があるとしましょうChild1。型の配列を作成します。ここで、型は型ParentでありArray[0]、型は型です。このシナリオで、子のメソッドを呼び出すにはどうすればよいでしょうか? と入力すると、メソッドのバージョンが呼び出されます。メソッドのバージョンを呼び出すにはどうすればよいですか? これは可能ですか?Child0Array[1]Child1Array[0].Method()ParentChild0

4

2 に答える 2

2

基本クラスで Method を virtual として宣言するだけです。

public class Parent{
    public virtual void Method(){
    ...
    }
}

継承クラスでそれをオーバーライドします。

public class Child : Parent{
    public override void Method(){
        ...
    }
}

親クラスに「標準」実装が本当に必要ない場合は、すべての継承クラスに独自のバージョンがあるため、メソッドを抽象として設定することもできます。

public class Parent{
    abstract public void Method();
}

その場合、選択の余地がなく、Parent から継承するすべてのクラスが Method の実装を提供する必要があります。そうしないと、コンパイル時エラーが発生します。

于 2012-10-05T20:44:05.297 に答える
1

親メソッドを作成するvirtualと、子クラスの基本メソッドをオーバーライドできます。

public class Human
{       
    // Virtual method 
    public virtual void Say()
    {
        Console.WriteLine("i am a human");
    }
}

public class Male: Human
{        
    // Override the virtual method 
    public override void Say()
    {
        Console.WriteLine("i am a male");
        base.Draw(); // --> This will access the Say() method from the 
       //parent class.           
    }
}

それらを配列に追加します:(私は個人的に a を使用しますList<T>

 Human[] x = new Human[2];
 x[0] = new Human();
 x[1] = new Male();

結果を印刷します:

 foreach (var i in x)
 {
    i.Say();
 }

印刷します

"i am a human" // --> (parent class implementation)    
"i am a male" // --> (child class implementation)
于 2012-10-05T20:44:53.203 に答える