求教,关于派生类关系的问题!

fishboyzyf 2008-02-18 05:03:19
class Program
{
public interface BaseInterface
{
void Test();
}
public class MyClass1 : BaseInterface
{
public void Test()
{
Console.WriteLine("in MyClass1;");
}
}
public class MyClass2 : MyClass1
{
public new void Test()
{
Console.WriteLine("in MyClass2;");
}
}


static void Main(string[] args)
{
BaseInterface x = new MyClass1();
x.Test();
x = new MyClass2();
x.Test();

}
}

结果为啥是:
in MyClass1;
in MyClass1;
而不是
in MyClass1;
in MyClass2;
...全文
53 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoom3000s 2008-02-18
  • 打赏
  • 举报
回复
因为x的类型依然是BaseInterface
vwxyzh 2008-02-18
  • 打赏
  • 举报
回复
lz看看这个的运行结果吧
        static void Main()
{
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class C : B
{
public new virtual void F()
{
Console.WriteLine("C.F");
}
}
class D : C
{
public override void F()
{
Console.WriteLine("D.F");
}
}

zyug 2008-02-18
  • 打赏
  • 举报
回复

由于是new 重写的所以不在虚函数表中

Console.WriteLine(x is MyClass2);
Console.WriteLine(x is MyClass1);
Console.WriteLine(x is BaseInterface);
三个都是true


事实说明,还是要多用virtual和override.
he_8134 2008-02-18
  • 打赏
  • 举报
回复
public class MyClass1 : BaseInterface

你可以用虚函数和override..

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧