現在の状況
現在、継承と抽象クラス・Interfaceについて勉強しています。
記事もそこそこ読み、ある程度の使い方はわかってきたのですが、
もっといい方法はないかと思ったので質問させていただきます。
実現したいこと
抽象クラス、またはInterfaceを使い処理を強制したい。
ただ、強制する部分に共通する処理が多いので内部に処理を書きたい。
どういうことかといいますと、
スーパークラス
C#
1abstract class Monster 2{ 3 // モンスターを湧かせる抽象メソッド 4 protected abstract void Pop(); 5}
サブクラス①
C#
1class Slime : Monster 2{ 3 // スライムを湧かせる 4 protected override void Pop() 5 { 6 Console.WriteLine("スライムが現れた!"); 7 } 8}
サブクラス②
C#
1class Goblin : Monster 2{ 3 // ゴブリンを湧かせる 4 protected override void Pop() 5 { 6 Console.WriteLine("ゴブリンが現れた!"); 7 } 8}
このような構造があった場合に、スーパークラスを以下のように書き換えることで、
メソッドの実装自体は強制、ただし中身は殆ど同じ処理をさせる。
といったようなことをしたいです。
C#
1abstract class Monster 2{ 3 // モンスターを湧かせる抽象メソッド 4 protected abstract void Pop(string name) 5 { 6 Console.WriteLine(name + "が現れた!"); 7 } 8}
発生している問題
abstractは中身を宣言できないと読んだ記事に書いてあったので、その通りになった。
抽象クラスが使えないならInterfaceで実装しようと、
C#
1interface IMonsterPop 2{ 3 protected void Pop(string name) 4 { 5 Console.WriteLine(name + "が現れた!"); 6 } 7}
というコードを書いたが、これだと継承した時点でメソッドの実装が強制ではなくなってしまった。
質問は以上です。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー