代码如下:
using System;
class A //定义类A
{
public void F() //方法F
{
Console.WriteLine("A.F");
}
public virtual void G() //虚方法G
{
Console.WriteLine("A.G");
}
}
class B:A //定义类B,继承A
{
new public void F() //覆盖类A方法F
{
Console.WriteLine("B.F");
}
public override void G() //重载类A虚方法G
{
Console.WriteLine("B.G");
}
}
class Test
{
static void Main(){
B b=new B(); //实例化类B
A a=b;
a.F(); //运行结果A.F,问题在这里
b.F(); //运行结果B.F
a.G(); //运行结果B.G
b.G(); //运行结果B.G
Console.ReadLine();
}
} 不很明白,是引用吗?此时的a代表的是b吗?那为什么a.F(); 运行结果又是A.F呢??高手回答一下?
谢谢啦,刚接触C#,实在想不明白,呵呵!
using System;
class A //定义类A
{
public void F() //方法F
{
Console.WriteLine("A.F");
}
public virtual void G() //虚方法G
{
Console.WriteLine("A.G");
}
}
class B:A //定义类B,继承A
{
new public void F() //覆盖类A方法F
{
Console.WriteLine("B.F");
}
public override void G() //重载类A虚方法G
{
Console.WriteLine("B.G");
}
}
class Test
{
static void Main(){
B b=new B(); //实例化类B
A a=b;
a.F(); //运行结果A.F,问题在这里
b.F(); //运行结果B.F
a.G(); //运行结果B.G
b.G(); //运行结果B.G
Console.ReadLine();
}
} 不很明白,是引用吗?此时的a代表的是b吗?那为什么a.F(); 运行结果又是A.F呢??高手回答一下?
谢谢啦,刚接触C#,实在想不明白,呵呵!
此时b中存在 a.F() 被隐藏,通过对象b访问不到,可以通过base.F()访问
b.F() new 定义隐藏了基类中a.F() 但没有删除,只是隐藏
b.G() 删除基类中a.G()当用对象b去实例化其基类a时 A a = b;
a.F() 依然调用b中隐藏的a.F()
a.G() 则调用b中仅存的b.G()不知道能不能帮到你,呵呵。
A a = new A();
A b = a ;
a , b 其实是指向同一块地址空间,当你改变对象b时,对象a同样被改变。