インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
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レスを投稿する
ニュース
- 「中国はメンヘラ」日本企業の本音は「もう生活を壊されるのはゴメンだよ」 [煮卵★]
- 「結局どこを走ればいいんですか?自転車は」 26年度から「青切符」導入 弁護士「自覚と認識を」 [七波羅探題★]
- 地方で深刻移動貧困の実態「車のために働いてる」手取り15万円のシンママ月3.2万円が軽自動車維持費★2 [七波羅探題★]
- 中国外務省「正式な発言撤回なければ受け入れず」 高市首相は台湾有事「存立危機事態」言及せずも「言及しないことと撤回は別問題」★10 [ぐれ★]
- 【芸能】カズレーザー 相次ぐ中国での公演中止に「これは日本人がやられている。中国全体で考えたら…」「日本側のダメージが大きく」 [冬月記者★]
- SNSを一触即発の“地雷原”に変えた「叩き活」の正体…推し活よりも“嫌いな相手を叩く”ことに快感を覚えるのはなぜか [おっさん友の会★]
- ロックバンド、高市をバカ呼ばわりしたため謝罪文を書いて謝罪させられる!日帝かな [369521721]
- ママさん、夫に借金(390万)が発覚した瞬間子ども2人と無理心中未遂をしてしまう㍇ [922647923]
- 産経新聞「今回の問題で、高市総理に反発して中国を擁護する日本人があぶり出されているのが面白い。(笑)」 [153490809]
- 自作pc界隈、崩壊 [329329848]
- おじゃる丸実況するお🏡
- 料理にこれ入れときゃ美味くなるやろってもの「ニンニク」「ごま油」←あと1つは???
