在类的基类上调用类的方法

本文关键字:方法 调用 基类 | 更新日期: 2023-09-27 18:03:07

我有一个基类Graphic_obj。

和我有许多派生类,例如:Graphic_obj_text, Graphic_obj_img,…

现在我想有一个列表与所有我创建的派生对象..

List<Graphic_obj> obj_list=new List<Graphic_obj>();

现在我的问题来了

我想遍历我的对象,并为每个对象调用"导出"函数,但从派生类本身!

我不想要if/else或者切换派生类的所有类型并强制转换它们。

我会想象这样的东西:

foreach (Graphic_obj obj in obj_list)
{
    (obj as obj.GetType()).export_to_csv();
}

但这不会编译…

我可以这样做:

obj.GetType().GetMethod("export_to_csv").Invoke(obj, null);

但我认为有一个更好更容易的方法?!

谢谢!

在类的基类上调用类的方法

export_to_csv设为虚拟并在派生类中重写它。您可以在基本export_to_csv中实现常用功能,派生类可以调用它。

class Graphic_obj {
    virtual void export_to_csv(){
        // Do stuff that's common across all classes
    }
}
class Graphic_obj_text : Graphic_obj {
    override void export_to_csv(){
        base.export_to_csv():
        // Do stuff specific to Graphic_obj_text
    }
}

您实际需要的技术称为多态性。您可以在父类中定义一个函数,并相应地在各自的子类中提供实现。以下是来自MSDN的一个简单示例:

根据我的理解,您要求的是虚拟方法,在这里描述;它们的存在正是为了你所描述的目的。