2009-11-26 4 views
0
Base Class B 
    | 
    | 
    ---- 
    | | 
    | | 
    D1 D2 

public static object GetDerivedClass(Type t1, MyProcess p1) 
{ 
    DerivedClass D1 = null; 
    DerivedClass D2 = null; 

    if (t1 is typeof(Derived) 
    { 
      Process(D1,p1); 
      return D1; 
    } 
    else if(t1 is typeof(Derived) 
    { 
      Process(D2,p1); 
      return D2; 
    } 
} 

,상속 하위 클래스 개체를 반환하는 방법? 내 질문 T1 유형으로 전달되는 개체의 유형을 반환하는 일반적인 방법이 될 것입니다 무엇

실제 구현에 내가 D1, D2의 많은 내 디자인 패턴의 깊은 계층 구조를 가지고 있기 때문에, 등 ...

+1

... 다이어그램에서 D1/D2 a * 유형 *? 또는 (C# 예제에 따라) a * 변수 *? 그리고 프로세스의 어떤 서명이 있습니까? –

+1

다이어그램이 클래스 계층 구조를 나타낼 것이라고 생각합니다. –

+0

요점은 코드 예제로 ** ** 전혀 계산하지 않는다는 것입니다 ... –

답변

2

당신은 일반적인 방법으로 당신의 Process 방법을 다시 쓸 수, 즉

T Process<T>(MyProcess p1) where T : new 
{ 

    // do work 
    // apparently your Process method must be creating a new instance 
    // this is why I put the new constraint on the type parameter 
    T t = new T(); 

    // set properties of t, etc. 

    return t; 
} 

귀하의 GetDerivedClass 방법은 지금은 중복입니다. 간단히 Process 방법을 다음과 같이 호출하십시오. -

var obj = Process<MyDerivedType>(p1); 
관련 문제