回 帖 发 新 帖 刷新版面

主题:关于虚方法和非虚方法混合调用的问题

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
请问哪位大虾能解释一下为什么吗 看不懂如何调用的 
有什么函数被隐藏的吗

回复列表 (共5个回复)

沙发

注意override和new的差别即可。

板凳

在 class C中有个 new 关键字。在这里它代表的是新建一个
public virtual void F(){Console.WriteLine("C.F");在内存中新建一个函数
这与没有new的差别。可以看下面这个例子。
 static void Main(string[] args){
       myClass1 y = new myClass1();
       myClss  x = y;
       x.i = 100;
       Console.WriteLine("{0} ,{1}",x.i,y.i);
}
class myClass{
 public int i;
 }
class myClass1:myClass{
  public new int i;
 }
算算看答案=多少??

3 楼


不好意思,我是新手,问个问题,你的代码我运行时总有这个错误
找不到类型或命名空间名称“myClss”(是否缺少 using 指令或程序集引用?)
怎么解决啊?

4 楼

是不是myClss少了一个a?即myClass。。

5 楼


是不是代码有误?
我想编程的人不会粗心到这个地步吧。
不解?[em14]

我来回复

您尚未登录,请登录后再回复。点此登录或注册