【发布时间】:2011-10-30 05:00:21
【问题描述】:
我有 2 节课:
public class A
{
public void WriteLine(string toWrite) { Console.WriteLine(toWrite); }
}
public class B : A
{
public new void WriteLine(string toWrite) { Console.WriteLine(toWrite + " from B"); }
}
在我的代码中,我执行以下操作:
B writeClass = new B();
writeClass.WriteLine("Output"); // I expect to see 'Output from B'
A otherClass = (A)writeClass;
otherClass.WriteLine("Output"); // I expect to see just 'Output'
我认为这会起作用,因为polymorphism.
但是,它总是每次都写入“从 B 输出”。有没有办法让它按照我想要的方式工作?
编辑修复代码示例。
【问题讨论】:
-
它的
public void WriteLine不是public void Write -
A中的方法应该是WriteLine而不是Write? -
New 只是隐藏了基础实现,因此您仍然可以通过从基础中显式调用方法来调用基础实现
-
固定代码示例在 LINQPad 中对我来说很好用。输出:
Output from B Output -
您发布的代码确实在我的机器上具有您期望的输出。如果它在你的机器上没有这个输出,那么你在编译器中发现了一个错误;请发布您正在使用的编译器的确切版本号,以便我可以尝试在该版本中重现它。
标签: c# .net inheritance .net-4.0 polymorphism