2014-05-13 42 views
1

我有一個名爲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); 

,但我覺得這是一個漂亮的更好更簡單的方法?!

謝謝!

+3

如果您正確覆蓋該方法,則會調用派生方法。分享你的方法實現。 –

回答

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 
    } 
} 
+0

恥辱我:) .. – mxii

2

我的理解是你要求的虛擬方法,其描述here;他們在那裏是爲了你描述的目的。

3

你實際需要的技術叫做多態性。您可以在父母中定義一個功能,並相應地爲各個子女提供實施。 HERE是來自MSDN的一個簡單示例。

+0

這不回答這個問題。 –

+1

@AntP我應該編碼? :P你期望什麼? – Zeeshan

+1

+1用於將OP引入OOP概念。 – d3dave