2

[注:以下の更新で説明しているように、この質問が上記のリンクと重複しているとは思いません。]

リフレクションを使用してジェネリック クラスを定義/インスタンス化する方法はありますか?

そのため、所有者の型を共有するジェネリック クラスのインスタンスを所有するクラスが多数あります。

public class GenericClass<T>
{
    T Owner { get; set; }
    public GenericClass(T owner) { Owner = owner; }
}
public class MyClass
{
    private GenericClass<MyClass> myGenericObject;
    public MyClass() { myGenericObject = new GenericClass<MyClass>(this); }
}

これは機能しますが、もちろん、GenericClass 定義の引数として "MyClass" を明示的に指定する必要があります。私はこのようなことをしたいと思います:

private GenericClass<typeof(this)> myGenericObject; // Error: invalid token

包含クラスに基づいて、コンパイル時に汎用オブジェクトの型を動的に指定する方法はありますか?


更新:これらの 質問の回答を読んだ後、次のようにローカル変数をインスタンス化できることがわかりました。

var myGenericObject = Activator.CreateInstance(typeof(GenericClass<>).MakeGenericType(this.GetType()));

ただし、もちろん、thisキーワードはメソッド内でのみ使用できます (したがって、たとえば、このコード行を のコンストラクターに入れることができますMyClass)。しかし、このアプローチを使用してインスタンス変数を定義することはできません (つまり、myGenericObject上記のコードでは)。ジェネリック インスタンス変数を動的に指定する方法はありますか?

4

3 に答える 3