从数组列表中的对象调用适当的方法

时间:2012-08-23 07:27:03

标签: c# inheritance xna polymorphism

我有一些来自基类的派生类。 基类是FormItem,派生类例如是InputField,Label或Button。

在FormItem类中,我有许多虚函数,例如:

internal virtual void draw(parameters) {}

此函数在每个派生类中重载。

我将派生类中的对象存储在名为formItems的数组列表中。

当我打这样的电话时:

((FormItem)formItems[index]).draw(parameters)

我希望调用重载函数,因为基类中的函数是虚函数。然而,调用基类的draw()方法。

一个相当丑陋的解决方案是制作一个巨大的if语句如下:

if (formItems[index] is Button)
  {
  ((Button)formItems[index]).draw(parameters);
  }
 else if (formItems[index] is Label)

等...

但是我希望有一个更好的解决方案,不需要我创建这个巨大的if-else块,但允许我让编译器解释我正在看的项目作为派生的对象自动类并调用相应的draw()方法。有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

internal virtual void draw(parameters) {}
     

此函数在每个派生类中重载。

我怀疑字面上是真的。为确保您自动调用正确的实现,必须在每个派生类中重写,即

class Button : FormItem {
    internal override void draw(parameters) { /* actual impl */ }
    ...
}

只要你override,它应该可以正常工作。