请高手指点.面向对象,我学得有点晕!
using System;
namespace ConsoleApplication1
{
public class ClassA
{
public void Go()
{Console.WriteLine("ClassA");}
}
public class ClassB:ClassA
{
public int t;
new public void Go()
{Console.WriteLine("ClassB");}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
ClassA A=new ClassA();
ClassB B=new ClassB();
B.t=10;
//A=B;
ClassB C=A as ClassB;
if(C == null)
Console.WriteLine("Null");
else
Console.WriteLine("not null");
//ClassB C=(ClassB)A;
//C.Go();
}
}
}
大家不用太看上边的测试代码.
ClassA A=new ClassA();
ClassB B=new ClassB();
B.t=10;
A=B;
ClassB C=(ClassB)A;
Console.WriteLine(C.t);
这时是可以输出C.t的,其值和B.t是相同的,这是为什么呢?按我的理解,A=B的时候,是将B的一部分可以转为的成员的复制到A的内存空间中,那也就是说A不在有t这个成员,那到再显示转到C上时,C.t应该是0,可结果确是还是C.t!请高手讲解原理!
还有:
ClassA A=new ClassA();
ClassB B=new ClassB();
B.t=10;
A=B;
ClassB C=A as ClassB;
Console.WriteLine(C.t); 这样的结果和上边的是一样的,为什么呢?它是怎么记住B这个对象的值的呢?或者说,是用什么怎么样的一个指针指到了B上?
如果注释掉://A=B,之后,C的就为Null了,这又是因为什么没有给C分配空间呢?
请各位高手指点迷津!谢谢.