在msdn中读取about polymorphism时,
我看到了一个虚拟和重写方法的示例:

public class BaseClass
{
    public virtual void DoWork() { }
    public virtual int WorkProperty
    {
        get { return 0; }
    }
}
public class DerivedClass : BaseClass
{
    public override void DoWork() { }
    public override int WorkProperty
    {
        get { return 0; }
    }
}

DerivedClass B = new DerivedClass();
B.DoWork();  // Calls the new method.

BaseClass A = (BaseClass)B;
A.DoWork();  // Also calls the new method.

我想知道的是,在什么情况下应该有人这样做?
我就是看不出它有什么用处。有人能举个真实的例子吗?

最佳答案

这在需要引用某些对象时非常有用,并且不能保留其确切类型的引用。例如,如果您有一个混合类型的对象列表:

List<BaseClass> list = new List<BaseClass>() {
  new BaseClass(),
  new DerivedClass(),
  new BaseClass(),
  new BaseClass(),
  new DerivedClass(),
  new DerivedClass()
};

现在您有一个BaseClass引用列表,但其中一些引用指向DerivedClass实例。
当你想使用它们时,你不需要检查它们的类型。您只需调用virtualDoWork方法,将为BaseClass.DoWork实例调用BaseClass方法,并为DerivedClass.DoWork实例调用DerivedClass方法:
foreach (BaseClass b in list) {
  b.DoWork();
}

10-01 03:03
查看更多