继承如何与不同的类对象一起使用

时间:2013-02-19 05:47:24

标签: c# oop

这是一个继承问题。我试图了解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"); }
}

1 个答案:

答案 0 :(得分: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不会引用对象的实例。