在其基类上调用类的方法

mxi*_*xii 1 c# casting base-class derived-class

我有一个名为Graphic_obj的基类.

我有很多派生类,例如:Graphic_obj_text,Graphic_obj_img,...

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

List<Graphic_obj> obj_list=new List<Graphic_obj>();
Run Code Online (Sandbox Code Playgroud)

现在我的问题出现了..

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

我不想if/else或切换派生类的所有类型并转换它们..

我会想象这样的事情:

foreach (Graphic_obj obj in obj_list)
{
    (obj as obj.GetType()).export_to_csv();
}
Run Code Online (Sandbox Code Playgroud)

但这不会编译..

我可以这样做:

obj.GetType().GetMethod("export_to_csv").Invoke(obj, null);
Run Code Online (Sandbox Code Playgroud)

但我觉得有一种更好更简单的方法吗?

谢谢!

Joh*_*ers 8

只需创建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
    }
}
Run Code Online (Sandbox Code Playgroud)