バックグラウンド
小さな個人的なゲーム プロジェクト用にいくつかのコンポーネント (この種のコンポーネント) を作成しています。このシステムでは、エンティティには、さまざまなカテゴリに属するさまざまなタイプのコンポーネントがあります。たとえば、コンポーネントのIControllerカテゴリには、KeyboardControllerとAiControllerが含まれます。エンティティにはコンポーネントのコレクションがあり、各カテゴリからコンポーネントを 1 つだけ持つ必要があります。すべてのコンポーネントはIComponentから継承します。
コンポーネントには、「このタイプのコンポーネントとして私を扱ってください!」と言うために、対応するタイプを報告する必要があるMetaTypeプロパティがあります。このプロパティはTypeオブジェクトを返します。AiControllerはtypeof(IController)を返し、Entity にこれをコントローラーとして扱うように指示します。他の有効な MetaTypes は、typeof(AiController)またはtypeof(IComponent)です。typeof(int)などの任意の型を返すことはできません。コンポーネント型だけです。
私の問題
現在、私のコンポーネントは MetaType の任意の型を報告できます。AIControllerは実際にtypeof(int)を返すことができます。たとえば、これは有効な Type オブジェクトです。
IComponentが祖先である任意のクラスまたはインターフェイスの型だけが有効な型になるように、 Type値を制限できますか? このような変数宣言は次のようになると思います。
Type<IComponent> component; // This can only store certain types
Type where Type : IComponent component; // This too
私はこれが可能かどうかに特に興味があります-代替アプローチではそれほどではありません(私はいくつか知っていますが、このコードで作業しているのは私だけなので、この動作を許可するだけです.