これは 2 部構成の質問です。
まず
、次のような ComponentList というクラスがあります。
public class ComponentList<T> : List<T> where T : Component
{
}
ここで、型のない ComponentList の空のリストを作成したいと思います。
List<ComponentList<>> MasterList = new List<ComponentList<>>();
ComponentList をまだ初期化しようとしていなくても (ComponentList を含む MasterList だけを)、ComponentList がジェネリック型を指定する必要があるため、エラーが発生します。ComponentLists を初期化せずに ComponentLists の MasterList を宣言するにはどうすればよいでしょうか (実行時にのみ認識される型で実行時に初期化する予定であるため)。結局のところ、MasterList には、1 つだけでなく、さまざまなジェネリック タイプの ComponentList が含まれている必要があります。
第二
に、これが以前に尋ねられたことは知っていますが、提案されたソリューションの概念に頭を悩ませているようには見えません。
ご存知のように、List<>
ComponentLists (カスタム クラス) のリストである MasterList という名前があります。ComponentList は、未定義の型のジェネリック クラスです (Component のサブタイプに制限されています)。
次の例では、ComponentList ジェネリック型 (MasterList から参照) がこのクラス (コードの呼び出し元のクラス) と同じかどうかを確認しようとしています。
if (MasterList[i].GetType() == typeof(ComponentList<this.GetType()>))
{
}
問題は、コードが、この親クラスからではなく、未知の子クラスから自動的に呼び出されることを意図していることです。したがって、ComponentList ジェネリック型は、この基本クラスではなく、子クラスの型と比較する必要があります。したがって、実際の基本クラスのハードコードされた名前の代わりに「this.GetType」が使用されます。
this.GetType()
ComponentList<> で渡された型は、実行時の型ではなくコンパイル時の型を返すため、明らかに「型が必要です」というエラーを返しGetType()
ます(これが必要です)。
では、ランタイム タイプを取得するにはどうすればよいでしょうか。それができない場合、私がやろうとしていることを達成するための最良の代替手段は何でしょうか? (リフレクションと呼ばれるものが役立つかもしれないという話を少し聞いたことがありますが、よくわかりません)。