Unity、C#初心者の学生です。ご教授願います。
おかしな点がありましたら、申し訳ありません。
###質問内容
■Unityはコンポーネント指向と言われていますが、継承は極力使わずに委譲するという考え方が正しいのでしょうか?
場面によると言われる方が多いと思いますが、「継承はもし間に1つクラスが入ると、修正のコストが、、、」と先輩に言われてしまいました。
皆さんの考えを聞かせていただきたいです。よろしくお願いいたします。
こちらの記事の方が解説していることは納得できるのですが、なかなか自分の方針に落とし込めません。。。
http://blog.livedoor.jp/wbcchsyn/archives/51385790.html
###例(継承)
// 親クラス public Class AnimalController : MonoBehaviour{ /// タップ抽出Observable public IObservable<Unit> TapObservable{ get; private set; } public virtual void Initialize() { // ストリーム定義 TapObservable = this.OnTapAsObservable(); // タップされら鳴く TapObservable.Subscribe(_ => Cry); } public virtual void Cry() { } } // 子クラス public Class DogController : AnimalController { public override void Cry() { Debug.Log("わんわん"); } }
###例(委譲)
/// 委譲元 public Class AnimalController : MonoBehaviour{ /// タップ抽出Observable public IObservable<Unit> TapObservable{ get; private set; } /// タップされた時に発火するAction private Action onTapedAction = () => {}; /// 初期化メソッド public void Initialize() { // ストリーム定義 TapObservable = this.OnTapAsObservable(); // タップされたときにonTapedActionを発火させる TapObservable.Subscribe(_ => onTapedAction()); } /// タップされたときの処理を追加するメソッド public void SetTapedAction(Action tapedAction) { this.onTapedAction += tapedAction; } } /// 委譲先(モデル層っぽい名前ですが、気にしないでください) public Class Dog : MonoBehaviour { /// 委譲元クラスをフィールドとして所持 public AnimalController animalController; void Awake () { // タップされたときの処理をセットする animalController.SetTapedAction(Cry); } public void Cry() { Debug.Log("わんわん"); } }