3

バックグラウンド

小さな個人的なゲーム プロジェクト用にいくつかのコンポーネント (この種のコンポーネント) を作成しています。このシステムでは、エンティティには、さまざまなカテゴリに属する​​さまざまなタイプのコンポーネントがあります。たとえば、コンポーネントのIControllerカテゴリには、KeyboardControllerAiControllerが含まれます。エンティティにはコンポーネントのコレクションがあり、各カテゴリからコンポーネントを 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

私はこれが可能かどうかに特に興味があります-代替アプローチではそれほどではありません(私はいくつか知っていますが、このコードで作業しているのは私だけなので、この動作を許可するだけです.

4

2 に答える 2

1

残念ながら、直接ではありません-ジェネリックで型パラメーターを制約することはできますが、フィールドなどの型変数を制約することはできません。MetaType基本的には、 を制約しようとするようなものintです。例外を使用して、無効な値に設定されないようにすることができますが、最終的には変数自体が正しい型になる可能性があります。

于 2013-04-12T01:05:58.640 に答える