1

ここに継承の質問があります。TAG1 から TAG3 へのプロセスを理解しようとしていました。正確に何が起こり、どのクラス参照を保持するか。ご提案をお待ちしております。

static void Main(string[] args)
{
    B b = new B(); **// What Happens here  TAG1**
    A a = b;       **//What Happens here TAG2**
    B x = new A() as B; **//what happens here TAG3**
    a.F();   
    a.G();
    a.H();
    a.Z();

    b.F();
    b.G();
    b.H();
    b.Z();

    x.F();
    Console.ReadLine();
}

public class A
{
    public void F() { Console.WriteLine("A.F"); }
    public virtual void G() { Console.WriteLine("A.G"); }
    public virtual void H() { Console.WriteLine("A.H"); }
    public void Z() { Console.WriteLine("A.Z"); }
}

public class B : A
{
    new public void F() { Console.WriteLine("B.F"); }
    public override void G() { Console.WriteLine("B.G"); }
    new public void H() { Console.WriteLine("B.H"); }
}
4

1 に答える 1

2
B b = new B(); **// What Happens here  TAG1**

ここで B のインスタンスが作成され、bそれへの参照が保持されます。

A a = b;       **//What Happens here TAG2**

aそのインスタンスが割り当てられます。つまり、以前に作成されたオブジェクトの一部にbアクセスできます。AB

B x = new A() as B; **//what happens here TAG3**

Aオブジェクトを作成してにキャストしますBが、キャストは失敗して を返しnullます。したがってx、オブジェクトのインスタンスを参照しません。

于 2013-02-19T05:52:31.540 に答える