他のさまざまなクラスに継承され、Attach
メソッドを使用してGameObject
メソッドにアタッチされる抽象クラスがあります。初期化作業はです簡単のために)。抽象クラス、ジェネリックメソッドの継承者の型を使用する
public abstract class GameBehaviour : MonoBehaviour
{
private bool initialized = false;
public void Initialize(GameState gameState)
{
initialized = true;
}
public static T Attach<T>(GameObject parent, GameState gameState) where T : GameBehaviour
{
T behaviour = parent.AddComponent<T>();
behaviour.Initialize(gameState);
return behaviour;
}
}
私はその後、WorldManager
との両方が抽象GameBehaviour
クラスを継承WorldRenderer
と呼ばれる別のクラスを持っています。
は、私は次のコードを使用し、これらのクラスのオブジェクトを「初期化」するには、次の
WorldManager manager = WorldManager.Attach<WorldManager>(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach<WorldRenderer>(gameObject, this);
が今、明らかに、<WorldManager>
と<WorldRenderer>
が冗長に感じています。私の質問は、Attach
メソッドをジェネリック型を必要としないように変更することが可能かどうかです。代わりに継承者の型を使用してください。多分私が忘れている、または気づいていないC#の概念があります。
フィードバックは高く評価されます。
ああ、なるほど!それは、一見冗長な ''をクラス宣言に置き換えますが、私はそれを他の方法よりも優先します。 何か他のことが現れない限り、この解決方法を使用します。どうもありがとうございました! –
ジェネリックパラメータをメソッドレベルに残すと、Tがどのパラメータでも使用されていないため、コンパイラはfromを型から推測することはありません。 – Maarten
私はどこにT:GameBehaviourを置き換えることをお勧めします。T:IGameBehaviourが可能なら、この方法で、あなたはそれを少しデカップリングします。 –
Andre