【发布时间】:2013-04-19 12:25:02
【问题描述】:
在Difference between Abstract and Virtual Function 了解抽象方法和虚拟方法之间的区别时。
我对@987654323@ 和new 有疑问
让我们考虑如下示例代码
class MainClass
{
public static void Main()
{
DerivedClass _derived = new DerivedClass();
_derived.SayHello();
_derived.SayGoodbye();
Console.ReadLine();
}
}
public abstract class AbstractClass
{
public void SayHello()
{
Console.WriteLine("Hello - abstract member\n");
}
public virtual void SayGoodbye()
{
Console.WriteLine("Goodbye- abstract member \n");
}
//public abstract void SayGoodbye();
}
public class DerivedClass : AbstractClass
{
public new void SayHello()
{
Console.WriteLine("Hi There - Hiding base class member");
}
//public override void SayGoodbye()
//{
// Console.WriteLine("See you later - In derived class OVERRIDE function");
//}
public new void SayGoodbye()
{
Console.WriteLine("See you later - In derived class I'm in NEW member");
}
}
我的问题:
在派生类中,如果我调用 SayGoodbye 函数,override 和 new 如何执行相同的功能?我什么时候需要去选择/喜欢它们?我需要在哪些实时场景中更喜欢?
【问题讨论】:
-
问题/答案@Oded 链接可完美回答您的问题。
-
用上面的代码试试这个:
Console.WriteLine((AbstractClass)_derived.SayGoodbye());。它将执行基类方法。如果您已覆盖而不是隐藏,则不会发生这种情况。