在foreach循环中调用派生类方法

use*_*322 0 c# oop foreach var

我遇到这段代码有问题:

List<Person> persons;    

foreach(var p in persons)
    p.Save();
Run Code Online (Sandbox Code Playgroud)

有几个派生自Person所有类的类都有自己的new Save()方法.不幸的是,上面的代码只调用基类的save方法,尽管列表包含不同类型的实例(基类和派生类).

所有派生类都包含所有基类'字段,只有Save方法不同,因此它还保存派生类'字段.

如何Save根据当前迭代的变量类型调用该循环调用适当的方法?

lc.*_*lc. 6

隐藏方法通常是灾难的处方.这种情况的正确实现将在类中声明Save(),并在派生类中声明.virtualPersonoverride

为了使它在你的情况下工作如上所述,你需要转换p为适当的派生类并调用Save()它.根据您对对象的了解或不了解,您可能需要动态确定派生类型并Save()使用反射调用其方法.