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实例,这意味着您可以访问A先前创建的B对象的一部分。

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

您创建一个A对象并将其转换为B,但转换将失败并返回null。因此x不会引用对象的实例。

于 2013-02-19T05:52:31.540 回答