2014-05-13 3 views
1

나는 Graphic_obj라는 기본 클래스를 가지고있다.클래스의 메소드를 기본 클래스로 호출하기

그리고 내가 예를 들어, 많은 파생 클래스가 있습니다 Graphic_obj_text, Graphic_obj_img을 ...

지금 난 내 만든 파생 된 모든 오브젝트로 목록을 갖고 싶어 ..

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

지금 내 문제가 발생합니다 ..

나는 내 개체를 통해 이동하고 각 "내보내기"함수를 호출하지만 파생 클래스 자체에서 싶어요!

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

OP를 OOP 개념으로 도입 한 경우 +1. – d3dave