【发布时间】:2011-12-24 22:02:25
【问题描述】:
我已经阅读了一些关于在 c++ 和 c# 之间的构造函数或析构函数中调用的虚函数的不同行为的材料。我测试下面的代码以确认 c# 可以调用虚拟驱动的虚拟函数,因为它的对象存在于构造函数之前。但是我发现结果与 c++ 中的类似代码相同。谁能告诉我为什么 c# 不能显示“22”而只能显示“12”的原因。
C#代码
public class Base
{
public Base() { fun(); }
public virtual void fun() { Console.WriteLine(1); }
}
public class Derived : Base
{
public Derived() { fun(); }
public virtual void fun() { Console.WriteLine(2); }
}
C++ 代码
class Base
{
public:
Base(){fun();}
virtual void fun(){cout<<1;}
};
class Derived : Base
{
public:
Derived(){fun();}
virtual void fun(){cout<<2;}
};
c++和C#的输出结果都是“12”。
【问题讨论】:
-
您能否提供一个指向描述不同行为的材料的链接?
-
我不是 C# 人,但我相信我确实在实际的 C# 2.0 标准中阅读了关于这个主题的注释。我稍后会挖掘它。您使用的是哪个 C# 版本?
-
C# 代码中确实存在错误,如答案中所述。
标签: c# c++ constructor virtual