Как получить тип производного класса в базовом классе без обобщений? - PullRequest
0 голосов
/ 01 марта 2011

Мой базовый класс использует отражение в производных классах, чтобы предоставить им некоторую функциональность.В настоящее время я делаю это так:

abstract class BaseClass<T>
{
    string GetClassString()
    {
        // Iterate through derived class, and play with it's properties
        // So I need to know the type of derived class (here T).
        return result;
    }

    static bool TryParse(string classString, out T result)
    {
        // I should declare a variable as T and return it
    }
}

Могу ли я сделать это без генериков?

1 Ответ

4 голосов
/ 01 марта 2011

Редактировать:

Извините, вам нужен параметр типа (то есть typeof(T)).В этом случае вы все еще используете this.GetType(), но добавляете .GetGenericArguments()[0] после.

Попробуйте выполнить синтаксический анализ: вам нужно создать новый экземпляр типа, который вы не знаете

Существует дваСпособы: Во-первых, без изменения остальных, с помощью класса Activator и следующего кода:

result = (T) Activator.CreateInstance(typeof(T))

( MSDN ).

Затем вы можете добавить "новое "ограничение для вашего типа:

MyClass<T> where T : new() {...}
result = new T();

Оба примера требуют конструкторов без параметров.Если вы хотите передать параметры, вам нужно углубиться в System.Reflection, получить список конструкторов и вызвать тот, который вам нужен.Заводской шаблон также может выполнять эту работу.

...