インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
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レスを投稿する
ニュース
- なぜコンビニは「外国人店員」だらけになったのか? 大手3社で8万人超…元セブン社員が明かす「日本人が集まらなくなった」現場の実情★3 [♪♪♪★]
- 【簗和生農水相】「私が取ってきた予算をなんで受注」 釈明会見後に“地元紙”が音声公開...「恫喝」批判が止まらない [煮卵★]
- 【沖縄】「許せない」「基地を返せ」 強盗殺人事件、沖縄に怒りの声 [ぐれ★]
- ヒコロヒー 新幹線でカレーや肉まん等ニオイの強いもの食べる問題に「食べていいというルールになっている以上、ある程度仕方ないよね」 [muffin★]
- 盗難された高級車を保管していたパキスタン人3人を逮捕 [お断り★]
- 大谷翔平が吐露…「自分のなかでもあまりよくない年の一つ」「WBCがあるとすごく長く感じる」★2 [王子★]
- 明日の仕事を頑張る人たちのお🏡
- 【実況】博衣こよりのえちえち夜釣りゆる凸待ち🧪
- 【悲報】おじさん、ビール売り子から買ったビールをそのまま捨てまくるwwwwwwwwwwwwwwwwwww [398059782]
- 沖縄県知事さん 殺人事件の会見中に突然笑い出す・・・・・・😨 [164880235]
- 【LIVE】凱旋門賞2026
- 【競馬】凱旋門賞、いつも通り日本馬が惨敗 [748563222]