3

以下のコードの結果は次のとおりです。

クラス A
クラス A
クラス A

public class A {
    public virtual void f() {
        Console.WriteLine("Class A");
    }
}
public class B : A {
    public virtual void f() {
        Console.WriteLine("Class B");
    }
}
public class C : B {
    public override void f() {
        Console.WriteLine("Class C");
    }
}
//...
static void Main(string[] args) {
    A[] array = new A[3];
    array[0] = new A();
    array[1] = new B();
    array[2] = new C();
    for(int d = 0; d < 3; d++)
        array[d].f();
}
4

2 に答える 2

10

virtual等しくないからoverrideです。キーワードを使用することによりvirtual、基本的に新しいメソッドを作成します。これは仮想ですが、クラス(クラス B)にとって新しいものであり、クラスの A メソッドをオーバーライドしません。B から継承されたクラス C は、クラス A のメソッド f() を知らないため、オーバーライドするには Bf() が必要です。Main メソッドでは、 Af() メソッドのみが存在する A クラスの配列を作成しています。お望みならば

Class A  
Class B  
Class C

クラス Boverrideの代わりに出力を使用します。virtual

于 2012-06-18T07:17:26.150 に答える
0

ああだから

A[] array = new A[3]; /*main reference to A object*/
于 2012-06-18T10:38:47.697 に答える