我有许多来自基类的派生类。基类是 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)
ETC...
但是我希望有一个更好的解决方案,不需要我创建这个巨大的 if-else 块,但允许我让编译器自动将我正在查看的项目解释为派生类的对象,并且调用适当的 draw() 方法。有谁能够帮助我?