如下例:
using System;
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}
输出结果:
B.F
B.F
D.F
D.F
最后一个结果没有什么说的,
1。前面3个结果为什么是这样?
2。a,b,c,d四个对象中各自包含的成员以及方法(包括继承过来的)是什么样子的?有没有相关工具可以查看对象包含的实际成员变量和方法的工具啊
3。c#中的多态和函数隐藏与c++的一样吗?
4。函数隐藏后,子类对象中不存在该方法还是存在该方法但是不能访问?
谢谢大家先!
using System;
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}
输出结果:
B.F
B.F
D.F
D.F
最后一个结果没有什么说的,
1。前面3个结果为什么是这样?
2。a,b,c,d四个对象中各自包含的成员以及方法(包括继承过来的)是什么样子的?有没有相关工具可以查看对象包含的实际成员变量和方法的工具啊
3。c#中的多态和函数隐藏与c++的一样吗?
4。函数隐藏后,子类对象中不存在该方法还是存在该方法但是不能访问?
谢谢大家先!
D d = new D();
A a=new A();
B b=new B();
C c=new C();
// D d=new D();
// A a = d;
// B b = d;
// C c = d;
a.F();
b.F();
c.F();
d.F();
这样,就是自己virtual 关键字,他就不再查询基类,使用base.时候
修改一下D,
class D: C
{
public override void F()
{
base.F();
// Console.WriteLine("D.F");
}
其实问了这么多只要知道a,b,c,d四个对象的内存结构就一目了然了,所以请各位指点一下,我有点乱了。
问题就是:a,b,c,d四个对象的内存结构和各自虚拟函数表存储的函数地址情况。
谢谢!