наследование, как вернуть объект подкласса? - PullRequest
0 голосов
/ 26 ноября 2009
    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 Ответ

2 голосов
/ 26 ноября 2009

Вы можете переписать свой 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...