gpt4 book ai didi

c# - msdn 中与虚拟/覆盖相关的示例的小误解

转载 作者:太空狗 更新时间:2023-10-30 00:40:38 24 4
gpt4 key购买 nike

阅读时about polymorphism在 MSDN 中,我看到了一个虚拟方法和重写方法的例子:

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 实例。

当你想使用它们时,你不需要检查它们的类型。您可以只调用虚拟 DoWork 方法,BaseClass.DoWork 方法将为 BaseClass 实例和 DerivedClass 调用。 DoWork 方法将为 DerivedClass 实例调用:

foreach (BaseClass b in list) {
b.DoWork();
}

关于c# - msdn 中与虚拟/覆盖相关的示例的小误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com