0

私の基本クラスは、派生クラスのリフレクションを使用して、それらにいくつかの機能を提供します。現在、私はこのようにしています:

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

ジェネリックなしでこれを行うことはできますか?

4

1 に答える 1

4

編集:

申し訳ありませんが、typeパラメータ(つまりtypeof(T))が必要です。その場合でも使用this.GetType()しますが、後で追加.GetGenericArguments()[0]します。

解析してみてください:不明なタイプの新しいインスタンスを作成する必要があります

2つの方法があります。1つは、残りを変更せずに、Activatorクラスと次のコードを使用する方法です。

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

MSDN)。

次に、タイプに「新しい」制約を追加できます。

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

どちらのサンプルも、パラメーターのないコンストラクターを必要とします。パラメーターを渡したい場合は、System.Reflectionの内部を深く調べ、コンストラクターのリストを取得して、必要なコンストラクターを呼び出す必要があります。ファクトリパターンもその役割を果たします。

于 2011-03-01T12:44:49.147 に答える