【发布时间】:2013-09-24 02:03:06
【问题描述】:
这段代码有问题:
List<Person> persons;
foreach(var p in persons)
p.Save();
有几个派生自Person 的类,它们都有自己的new Save() 方法。不幸的是,上面的代码只调用了基类的保存方法,尽管列表包含不同类型的实例(基类和派生类)。
所有派生类都包含所有基类的字段,只有Save方法不同,所以它也保存了派生类的字段。
如何根据当前迭代的变量类型使该循环调用适当的Save 方法?
【问题讨论】:
-
你能举一个派生类的保存方法的例子吗?
-
@JustinPihony 这有什么帮助?
-
你能告诉我们保存方法是如何定义的吗?它在 Person 类上被定义为 virtual 对吗?
-
如果您使用
new Save(),您将无法通过典型的方法覆盖/继承方式调用该方法。请查看新关键字的作用,在这种情况下,这与您希望它做的基本相反。 -
好吧。这可能是问题所在。如何修改基础方法和派生方法以使其正常工作?