这是一个继承问题。我试图了解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"); }
}
答案 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
不会引用对象的实例。