// シーンの基底クラス abstract class SceneBase { public virtual void Update() { // 共通処理 } } // タイトルシーン class TitleScene : SceneBase { public override void Update() { base.Update(); // ここがメンドくさい } } // メインメニューシーン class MainMenuScene : SceneBase { public override void Update() { base.Update(); // ここがメンドくさい } }
クラスを継承して関数をオーバーライドして
派生クラスから基底クラスの共通処理を呼び出すときは
「base.関数名」で呼び出すことができますが、
毎回派生クラスから基底クラスの関数を呼び出すのは手間なので
// シーンの基底クラス abstract class SceneBase { public void Update() { // 事前処理 // 派生クラス独自の処理を呼び出し DoUpdate(); // 事後処理 } protected abstract void DoUpdate(); } // タイトルシーン class TitleScene : SceneBase { protected override void DoUpdate() { } } // メインメニューシーン class MainMenuScene : SceneBase { protected override void DoUpdate() { } }
僕はいつもこのような記述方法を行います
こうして基底クラスの抽象メソッドを
基底クラスで共通処理を書く用の関数(Update)と
派生クラスで独自処理を書く用の関数(DoUpdate)で分割することで
毎回派生クラスで「base.関数名」を書く必要がなくなります
また、事前処理と事後処理を書けるので汎用性は高いです