在其基类上调用类的方法

时间:2014-05-13 07:35:10

标签: c# casting derived-class base-class

我有一个名为Graphic_obj的基类。

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

现在我希望有一个列表,其中包含我创建的所有派生对象..

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

现在我的问题出现了..

我想通过我的物品并打电话给&#34;导出&#34;每个函数,但来自派生类本身!

我不想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);

但我认为有一种更好更简单的方法?!

谢谢你!

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:3)

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

答案 2 :(得分:2)

根据我的理解,你要求的是虚拟方法,这些方法被描述为here;它们完全是你描述的目的。