インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
interface IBird { string Name { get; } }
interface IFlyable { void Fly(); }
// ペンギンは飛べないので IFlyableを実装しない
class Pengin : IBird { ... }
class Eagle : IBird, IFlyable { ... }
のようにした場合に、プログラムが List<IBird> birds のような形でデータを持つと、「飛べる鳥がいる」という情報が型から消える
foreach (IBird bird in birds) {
Console.write(bird.Name);
if (bird is IFlyable flyable) {
flyable.Fly();
}
}
「飛べる鳥なら飛ばす」ようにしたい場合、インターフェースを分離する場合だと上記のように is でキャストするしか無さそう?
IBirdで扱っているのに「インスタンスは IFlyable である可能性がある」という情報に依存してるのに少し違和感があって、より綺麗な解決策があれば知りたい
探検
C#, C♯, C#相談室 Part98
203デフォルトの名無しさん (ワッチョイ 476d-Ahcx)
2024/12/11(水) 23:21:13.31ID:uq+uLBFl0レスを投稿する
ニュース
- 高市内閣の若い世代の支持率は92.4% FNN世論調査 [♪♪♪★]
- H3ロケット8号機打ち上げ失敗、衛星軌道投入できず ★7 [少考さん★]
- 鈴木農相、おこめ券ではコメしか買えないとの誤解が広がっている 食料品などに幅広く使える [Hitzeschleier★]
- ゼレンスキー氏「高市総理に感謝」 9000億円超追加支援に 「国際秩序に貢献」 (動画あり) [ごまカンパチ★]
- 【兵庫】午後8時半、公園で座り込む小6男児「門限過ぎ、怒られるから帰れない…」 送り届けた女子高生2人に感謝状 尼崎 [ぐれ★]
- 【MLB】村上宗隆の『小型契約』は吉田正尚の影響か 市場が思いのほか停滞 「NPB打者に懐疑的。吉田が高すぎた」 [冬月記者★]
- 【高市悲報】超有名YouTuber、「米山隆一が逮捕される」というデマ動画が20万回再生、無事訴えられる🥹 [931948549]
- 【実況】博衣こよりのえちえちねっこよ24m 🧪🍑 🥟★4
- 🏡
- 【朗報】ホロライブさん、12月25日クリスマスパーティーを実施!
- 嫌儲の核保有反対派ってなんであんなに馬鹿みたいなやつしかいないの? [848333321]
- 茶ぁしばこうやぁ···( ¨̮ )︎︎𖠚ᐝ11
