在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
实例。当你想使用它们时,你不需要检查它们的类型。您只需调用virtual
DoWork
方法,将为BaseClass.DoWork
实例调用BaseClass
方法,并为DerivedClass.DoWork
实例调用DerivedClass
方法:foreach (BaseClass b in list) {
b.DoWork();
}