オブジェクトを参照するインスタンス変数を1つだけ持つ必要があるように感じます。しかし、以下のコードでは、同じオブジェクトを参照する2つのインスタンス変数「_character」と「_witch」があります。より特殊な魔女クラスを追加する場合は、3番目のインスタンス変数を追加する必要があります。
これは通常、この状況で人々が行うことですか?または、1つの参照のみを使用してこれを実現する方法はありますか?また、私は本当に何もキャストする必要はありません(それがこのシナリオのベストプラクティスでない限り)。
AnimationControllerを拡張するWitchAnimationControllerに加えて、WitchStateはCharacterStateを拡張します。
基本クラス:
public class AnimationController
{
protected CharacterState _character;
public AnimationController( CharacterState character )
{
_character = character;
}
public void UpdateAnimations()
{
/* call on some CharacterState functions... */
}
}
子クラス:
public class WitchAnimationController : AnimationController
{
protected WitchState _witch; //inherits from CharacterState
public AnimationController( WitchState witch ) : base( witch )
{
_witch = witch;
}
public void UpdateAnimations()
{
base.UpdateAnimations();
/* call on some WitchState functions... */
}
}
魔女特有の呼び出しが必要ない場合は、_witch
フィールドを捨ててフィールドを使用できますが、_character
個人的には保護されたプロパティを持つプライベートフィールドにします。
キャラクター固有のメンバーが必要な場合は、アニメーションコントローラーを汎用にすることを検討する必要があります。
public class AnimationController<T> where T : CharacterState
{
protected T _character;
public AnimationController(T character)
{
_character = character;
}
public void UpdateAnimations()
{
/* call on some CharacterState functions... */
}
}
次に:
public class WitchAnimationController : AnimationController<WitchState>
{
public WitchAnimationController(WitchState witch) : base(witch)
{}
public void UpdateAnimations()
{
base.UpdateAnimations();
_character.SomeMethodOnWitchState();
}
}
_character.SomeMethodOnWitchState()
コールは、内部に有効になりますWitchAnimationController
ので、_character
効果的にタイプのですWitchState
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加