class A { public int Width; public int Height; } class B { public int Width; public int Height; } class RefValTest { public static int Main() { A a = new A(); a.Width = 10; a.Height = 15; B b = a; Console.WriteLine(b.Width + b.Height); a.Width = 20; a.Height = 25; Console.WriteLine(b.Width + b.Height); }输出: 1015; 2025;
如:int i=5;
long l=i;
是一种隐式转换
{
public int Width;
public int Height;
}
class B
{
public int Width;
public int Height;
}
class RefValTest
{
public static int Main()
{
A a = new A();
a.Width = 10;
a.Height = 15;
B b = a;
Console.WriteLine(b.Width + b.Height);
a.Width = 20;
a.Height = 25;
Console.WriteLine(b.Width + b.Height);
}输出:
1015;
2025;
B bbb = new B();
A aaa = bbb; 的解释~~
这是一个多态的问题吧,主要的问题就是aaa.F()和aaa.G()调用的是两个类的方法。楼主看看关于多态的解释就明白了。
A aaa = bbb;
aaa.F()为什么是 A
aaa.G()为什么是 B?
请指教
看了,不是很明确
A aaa = bbb;
aaa.F()为什么是 A
aaa.G()为什么是 B?
请指教
---------
aaa.F()是为A,但aaa.G()应该是D啊。
不好意思,写错了
{
public void F()
{
Console.WriteLine("A");
}
public virtual void G() //虚拟一个方法
{
Console.WriteLine("B");
}
}
class B:A //继承类A的方法与属性
{
new public void F() //通过new关键字显式隐藏从A类继承的方法
{
Console.WriteLine("C");
}
public override void G() //通过override关键字重写A类中的虚拟方法G()
{
Console.WriteLine("D");
}}
class Test
{
public static void Main()
{
B bbb = new B();//创建B类的实例
A aaa = bbb; //创建A类的实例,引用B类的方法,(小弟也不知道这如何才说得更贴切)
B ccc = bbb; //创建B类的实例,引用B类的方法
aaa.F(); 结果:A 原因:调用A类的F()方法
bbb.F(); 结果:C 原因:调用B类的F()方法
aaa.G(); 结果:D 原因:因为A类的G()虚拟方法是由继承B类重写,所以是调用B类中的G()方法
bbb.G(); 结果:D 原因:调用B类的G()方法
ccc.F(); 结果:C 原因:调用B类的F()方法
ccc.G(); 结果:D 原因:调用B类的G()方法
}
}
很正常,但是要让现在的类能继承未来的类,这就是令人十分激动的事情,你所问的问题就是是这样,说来说去还是多态的特点,什么时候你把《深入浅出MFC》看一下
你定然会恍然大悟了 呵呵
A aaa = new A();//建立classs A的一个实例
aaa = bbb;//给aaa赋值