!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2022 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C#, C♯, C#相談室 Part98
1デフォルトの名無しさん (ワッチョイ 7f6a-B4f6)
2024/06/29(土) 19:18:41.95ID:NohAfdfx0135デフォルトの名無しさん (ワッチョイ 9b1f-uEGg)
2024/10/06(日) 15:19:51.19ID:6ToZA1R70 なにかの文書を画面に表示したい
← 表示したい部分が何行目に当たるか計算する
← 一行に含まれる文字数を知りたい
← プロポーショナルフォントのときはどうするん?
← 行の長さを測定する関数使え
← 一文字ずつ足したり引いたりしながら測定を繰り返す
← 全部の行についてこれやんなきゃかよ?
← やってられない
← 表示したい部分が何行目に当たるか計算する
← 一行に含まれる文字数を知りたい
← プロポーショナルフォントのときはどうするん?
← 行の長さを測定する関数使え
← 一文字ずつ足したり引いたりしながら測定を繰り返す
← 全部の行についてこれやんなきゃかよ?
← やってられない
136デフォルトの名無しさん (ワッチョイ af78-cSv7)
2024/10/06(日) 18:49:45.21ID:TXz4j2F10 azukiのソースコード見れば?
137デフォルトの名無しさん (ワッチョイ 6701-DEg1)
2024/10/06(日) 18:57:38.47ID:I3D2t/Zs0 >>135
>← 表示したい部分が何行目に当たるか計算する
テキストファイルなら頭から読み込むしかなく改行でカウントアップするだけ
>← 一行に含まれる文字数を知りたい
>← プロポーショナルフォントのときはどうするん?
文字数によって折り返し位置が決まるか
表示幅によって折り返し位置が決まるかのどちらか
両方のルールを同時に適用するというのは一般的ではない
プロポーショナルフォントが関係してくるのは後者の場合のみ
表示幅で折り返す場合は指定したRectangleにフィットするよう
よろしくやってくれる表OS提供のAPIがあるので基本的にはそれを使う
APIの内部的では各文字の表示幅を足し算してるが
とりあえずは画面表示部分だけを計算すればいいので
思ってるほど大した計算量ではない
>← やってられない
んなことたぁない
>← 表示したい部分が何行目に当たるか計算する
テキストファイルなら頭から読み込むしかなく改行でカウントアップするだけ
>← 一行に含まれる文字数を知りたい
>← プロポーショナルフォントのときはどうするん?
文字数によって折り返し位置が決まるか
表示幅によって折り返し位置が決まるかのどちらか
両方のルールを同時に適用するというのは一般的ではない
プロポーショナルフォントが関係してくるのは後者の場合のみ
表示幅で折り返す場合は指定したRectangleにフィットするよう
よろしくやってくれる表OS提供のAPIがあるので基本的にはそれを使う
APIの内部的では各文字の表示幅を足し算してるが
とりあえずは画面表示部分だけを計算すればいいので
思ってるほど大した計算量ではない
>← やってられない
んなことたぁない
138デフォルトの名無しさん (ワッチョイ de10-1ld3)
2024/10/06(日) 20:12:16.90ID:MCn4L0pH0 そもそも公開されてるソースがC++多いからなんだというのか
139デフォルトの名無しさん (ワッチョイ c679-nM05)
2024/10/07(月) 02:48:29.36ID:x7sAaviV0 >←
それより矢印の使い方おかしくね?と思った
それより矢印の使い方おかしくね?と思った
140デフォルトの名無しさん (ワッチョイ dfae-Q8Y9)
2024/10/07(月) 06:41:02.52ID:5XNBqMZ+0 →えっ
141デフォルトの名無しさん (ワッチョイ 4a7b-ohfc)
2024/10/07(月) 07:51:22.02ID:W61JLdXH0 矢印 Unicode(ユニコード)一覧 文字 0g0.org
https://0g0.org/topic/arrows/
https://0g0.org/topic/arrows/
142デフォルトの名無しさん (ワッチョイ aad1-5ZBO)
2024/10/07(月) 08:50:05.33ID:D9AWyaeE0 ↑↑↓↓→→←←
143デフォルトの名無しさん (オイコラミネオ MM1f-1ld3)
2024/10/07(月) 20:30:46.78ID:0ozgkte7M 個人レベルで作るなら別にベストな方法じゃなくても良い
とりあえず作ってみたらいい
そして徐々にブラッシュアップしていけばいい
とりあえず作ってみたらいい
そして徐々にブラッシュアップしていけばいい
144デフォルトの名無しさん (スププ Sdea-YEqV)
2024/10/08(火) 02:42:19.62ID:xQWM8K5Vd どうせTextBoxかRichTextBox使うから
いちいち行の文字数数えて改行とかという発想がでてこなかったわ
毒されてるんだろうか
いちいち行の文字数数えて改行とかという発想がでてこなかったわ
毒されてるんだろうか
145デフォルトの名無しさん (エムゾネ FFea-oLgd)
2024/10/08(火) 09:46:02.12ID:5xpr1xvYF 質問者の作りたい物に行番号やカーソル位置座標とか要らなさそうだから
テキストボックスで十分だと思う
テキストボックスで十分だと思う
146デフォルトの名無しさん (スププ Sdea-YEqV)
2024/10/09(水) 03:08:11.25ID:w53uZCE9d 行列番号、文字数、ファイルサイズ、ドラッグ移動、カラー絵文字、正規表現検索&置換、折り返し
これぐらい欲しい
これぐらい欲しい
147デフォルトの名無しさん (ワッチョイ 5af9-7zav)
2024/10/09(水) 05:37:10.40ID:u99M/+800 こりゃ確かにいろいろと発想がズレてるな
148デフォルトの名無しさん (ワッチョイ 433f-YEqV)
2024/10/10(木) 01:43:13.48ID:9oubSm9f0 カラー絵文字ってどうやるんだろう
149デフォルトの名無しさん (ワッチョイ ca8e-gWHf)
2024/10/10(木) 01:45:48.53ID:l5e/OliZ0 どうとは?
もしかしてわざわざ白黒にしてるのか?
もしかしてわざわざ白黒にしてるのか?
150デフォルトの名無しさん (ワッチョイ dfa4-suLy)
2024/10/10(木) 02:14:45.51ID:To6qDb1x0 くるみぽんちおの刑だ!!
151デフォルトの名無しさん (ワッチョイ 433f-YEqV)
2024/10/10(木) 14:48:43.23ID:9oubSm9f0 まじかテキストボックスがカラー絵文字に対応したのか
週末試してみるわありがと
週末試してみるわありがと
152デフォルトの名無しさん (ワッチョイ b301-duPS)
2024/10/11(金) 00:26:48.51ID:zClzE2L70 win11で作ったformアプリがwin10で盛大にズレてて頭抱えてる
153デフォルトの名無しさん (ワッチョイ 4a7b-ohfc)
2024/10/11(金) 01:05:53.43ID:bny4Xk3b0 >>152
何をもってOSに起因する症状だと判断したの?
何をもってOSに起因する症状だと判断したの?
154デフォルトの名無しさん (ワッチョイ de10-1ld3)
2024/10/11(金) 06:58:29.47ID:tH3T8XD80 OSバージョン毎のフレームサイズの差異とか気にもせずに処理でも書いたか?
155デフォルトの名無しさん (ワッチョイ 9e61-oLgd)
2024/10/11(金) 08:01:38.38ID:v/PLCR+10 OS関係なく単にディスプレイのスケーリングの違いでは
156デフォルトの名無しさん (ワッチョイ 467c-7zav)
2024/10/11(金) 09:18:43.20ID:izME7MQN0 それだな
157デフォルトの名無しさん (ワッチョイ 0671-lt6P)
2024/10/11(金) 09:50:54.30ID:wAOvgD780 フォントとか配置とかやり直しはMacOSのあるあるだと思ってた
158デフォルトの名無しさん (ワッチョイ a913-VR7F)
2024/10/21(月) 02:25:35.38ID:SQ8zGBXh0 ライブラリを使用するために下みたいなコード書いた
ライブラリ内でIHoge.Method();の機能を上書きしたいのとHogeで設定されるさまざまな機能を使いたいがためにIHogeを実装したHogeクラスを継承してMethod();を隠蔽、そのうえでライブラリから呼び出されるようにIHogeをさらに継承?実装させてる
ちょっと無理矢理感強いけどこれはアリですか?
ライブラリの中
~
IHOGE.Method();
~
public interface IHoge
{
public void Method();
}
public class Hoge : IHoge
{
public void Method()
{
元の処理
}
}
自前で作ったクラス
public class NewHage : Hoge,IHoge
{
public new void Method()
{
上書き処理←やりたいこと
}
}
ライブラリ内でIHoge.Method();の機能を上書きしたいのとHogeで設定されるさまざまな機能を使いたいがためにIHogeを実装したHogeクラスを継承してMethod();を隠蔽、そのうえでライブラリから呼び出されるようにIHogeをさらに継承?実装させてる
ちょっと無理矢理感強いけどこれはアリですか?
ライブラリの中
~
IHOGE.Method();
~
public interface IHoge
{
public void Method();
}
public class Hoge : IHoge
{
public void Method()
{
元の処理
}
}
自前で作ったクラス
public class NewHage : Hoge,IHoge
{
public new void Method()
{
上書き処理←やりたいこと
}
}
159デフォルトの名無しさん (ワッチョイ a913-VR7F)
2024/10/21(月) 02:45:34.93ID:SQ8zGBXh0160デフォルトの名無しさん (ワッチョイ 11de-LgwA)
2024/10/21(月) 08:25:43.38ID:451kbP4c0161デフォルトの名無しさん (ワッチョイ 0501-FUd+)
2024/10/21(月) 12:38:44.14ID:1/IbrF450 >>158
それがやりたいことなら別にいいんじゃね?
Hogeの他のメソッドがMethod()を呼ぶとか
Method()がHogeの他のメソッドを呼ぶとかの関係が出てくると
newを使わない場合に比べるとバグるリスクが高くなるような気はする
インターフェース+コンポジションにしておけばバグるリスクは低くなる
その代わりに多少書く手間がかかる
それがやりたいことなら別にいいんじゃね?
Hogeの他のメソッドがMethod()を呼ぶとか
Method()がHogeの他のメソッドを呼ぶとかの関係が出てくると
newを使わない場合に比べるとバグるリスクが高くなるような気はする
インターフェース+コンポジションにしておけばバグるリスクは低くなる
その代わりに多少書く手間がかかる
162デフォルトの名無しさん (ワッチョイ 8d64-VR7F)
2024/10/21(月) 12:53:33.54ID:bUjh45Ks0163デフォルトの名無しさん (ワッチョイ 86cd-yIdu)
2024/10/22(火) 12:35:56.21ID:SqPRTKfI0 newで上書きしたことないな
164デフォルトの名無しさん (ワッチョイ 5166-VR7F)
2024/10/22(火) 19:02:31.64ID:4SydPJoD0 >>163
なんかchatGPTが教えてくれた
なんかchatGPTが教えてくれた
165デフォルトの名無しさん (ワッチョイ 5166-VR7F)
2024/10/22(火) 19:03:43.61ID:4SydPJoD0 てかVisualStudioが教えてくれた
緑波線でnewしてくださいって
public new 戻り値の型 メソッド名
緑波線でnewしてくださいって
public new 戻り値の型 メソッド名
166デフォルトの名無しさん (ワッチョイ 0610-6/Jd)
2024/10/23(水) 20:43:06.26ID:laRxPcH30 ML.NETを試してみたら思いの外お手軽で面白いな
アプリにさくっと組み込めそうだ
アプリにさくっと組み込めそうだ
167デフォルトの名無しさん (ワッチョイ 516d-HdbC)
2024/10/23(水) 21:09:39.51ID:KLvEEO4T0 >>166
薄い本があるので入手お勧め
薄い本があるので入手お勧め
168デフォルトの名無しさん (ワッチョイ a91c-VR7F)
2024/10/24(木) 06:52:54.39ID:OBQWEe3S0 .NET MAUIで試したことあるけどWindowsはいけたがAndroidではトレーニングでエラーはいた記憶
169デフォルトの名無しさん (ワッチョイ 93ea-bV64)
2024/10/27(日) 08:19:05.51ID:9uOX0V+f0170デフォルトの名無しさん (ワッチョイ 138b-/tLw)
2024/11/01(金) 19:03:45.14ID:lJMjrugG0 CookieってSystem.Text.Jsonでシリアライズ・デシリアラズするとDomainKey変わっちゃってSet-Cookieで同じ名前のクッキー来ても違う奴判定されてダブるんだな
正確に言うと先頭ドット有りだと変わらないのと、BinaryFormatterやNewtonsoft.Jsonで非パブリックフィールド含む全フィールドをそっくりそのままストア・ロードさせれば変わらないんだけど
正確に言うと先頭ドット有りだと変わらないのと、BinaryFormatterやNewtonsoft.Jsonで非パブリックフィールド含む全フィールドをそっくりそのままストア・ロードさせれば変わらないんだけど
171デフォルトの名無しさん (ワッチョイ 756b-x+fa)
2024/11/14(木) 09:50:27.66ID:2GoXPHL10 ZipPlaってファイル管理ソフトのソース持ってる人いる?
居たらアップして欲しい
居たらアップして欲しい
172デフォルトの名無しさん (ワッチョイ cd33-Hhir)
2024/11/14(木) 10:20:27.81ID:WaFHXOHg0173デフォルトの名無しさん (ワッチョイ 1d8c-x+fa)
2024/11/16(土) 02:07:13.59ID:h+Fv95x40174デフォルトの名無しさん (ワッチョイ 468b-3HPC)
2024/12/07(土) 11:39:26.82ID:ITlUnsCD0 WinFormsってWindowのクラスネーム決められないの?
Win32のFindWindowのClassNameで探させたいのだけど
Win32のFindWindowのClassNameで探させたいのだけど
175デフォルトの名無しさん (ワッチョイ 3aae-tB/P)
2024/12/07(土) 17:24:39.89ID:8OMGJvUm0 protectedなCreateParamsプロパティをオーバーライドしてClassNameを書き換えることはできる
独自名ならとりあえずRegisterClassは必要だけどそれだけで済むかどうかは知らん
独自名ならとりあえずRegisterClassは必要だけどそれだけで済むかどうかは知らん
176デフォルトの名無しさん (ワッチョイ df8b-GzkI)
2024/12/08(日) 10:13:10.77ID:Rw3oOi650 C#側のプロパティは書き換えられても実際の内部の値はそういうことしないと無理そうか
177デフォルトの名無しさん (ワッチョイ 7f10-InQL)
2024/12/08(日) 11:19:30.20ID:kkfUSfWy0 RegisterClassExしてやろうとしたことあるけど
CreateParamsでRegisterしたClassName指定してもエラーになって
それで良く分からんまま放棄したな昔
CreateParamsでRegisterしたClassName指定してもエラーになって
それで良く分からんまま放棄したな昔
178デフォルトの名無しさん (ワッチョイ 7f12-7Ydj)
2024/12/08(日) 11:24:39.87ID:I292Dtst0 流行りのAIはその辺何か教えてくれんのか?
179デフォルトの名無しさん (ワッチョイ bfe9-31Hx)
2024/12/08(日) 11:42:31.33ID:gLALr0T30 はい
180デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/08(日) 12:16:51.06ID:9nkQEnF50 人間が垂れ流した知識を混ぜるだけのAIが、人間が知らないことを教えられるわけないだろw
181デフォルトの名無しさん (オイコラミネオ MMab-InQL)
2024/12/08(日) 12:37:03.03ID:cRlpRIfuM 世界中のどこかで語られたかもしれない事実をそこらの人間がすべて知ってると思うのがおかしい気がする
182デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/08(日) 17:47:34.90ID:d7OE/SEZ0 つーかさWin32APIのCreateWindowで作ったウィンドウをC#にAttachする程度基本的な仕組みぐらいあるやろ
あるやろ…
あるやろ…
183デフォルトの名無しさん (ワッチョイ 5f62-oAsD)
2024/12/08(日) 21:09:31.34ID:NIwBIUGx0 CSharp初心者が学習始めるなら何からがおすすめ?
多分IIS?使ったウェブアプリになるんだけども
Javaでのアプリ開発経験はあり
多分IIS?使ったウェブアプリになるんだけども
Javaでのアプリ開発経験はあり
184デフォルトの名無しさん (ワッチョイ 2762-RQnm)
2024/12/08(日) 21:38:41.73ID:Dh5r1ipA0 Paint.netのソースを見たまえ
185デフォルトの名無しさん (ワッチョイ 5f62-oAsD)
2024/12/08(日) 21:46:52.70ID:NIwBIUGx0 これかな、ありがとちょっと見てみるわ
h
ttps://github.com/paintdotnet
h
ttps://github.com/paintdotnet
186デフォルトの名無しさん (アウアウエー Sa9f-zpgV)
2024/12/09(月) 11:14:47.99ID:uh4vUAM3a SetWindowLong
SetWindowLongEx
SetWindowLongEx
187デフォルトの名無しさん (アウアウエー Sa9f-zpgV)
2024/12/09(月) 11:15:02.52ID:uh4vUAM3a GWL_EX_STYLE
188デフォルトの名無しさん (ワッチョイ dff4-tB0+)
2024/12/09(月) 13:22:41.09ID:wWCmXoxS0 科学 + 5ch
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1733576027/
コメントに面白いことが書かれている
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1733576027/
コメントに面白いことが書かれている
189185 (ワッチョイ 5f62-oAsD)
2024/12/09(月) 17:56:14.64ID:apYLNmO+0 PaintDotNetをインストールした
190デフォルトの名無しさん (ワッチョイ 47da-InQL)
2024/12/11(水) 06:17:57.42ID:BgUz4+cQ0 varなんて使うな戦争ってもう終結したの?
191デフォルトの名無しさん (オッペケ Sr1b-2ZNr)
2024/12/11(水) 07:27:33.98ID:DZxIsQuWr 言語によりけりだから
192デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/11(水) 08:36:42.20ID:tumrZkmz0 盲目的にvar使うなとは思うけど、一切使うなはないなぁ
193デフォルトの名無しさん (ワッチョイ df2b-2fXw)
2024/12/11(水) 08:50:12.41ID:AAqkzyDB0 まあマイクロソフトのサンプルにも使ってる例あるしな
194デフォルトの名無しさん (ラクッペペ MM8f-n9Eh)
2024/12/11(水) 10:05:12.70ID:BwkZDwjMM jsのvarと違ってただの便利機能だしな
195デフォルトの名無しさん (ワッチョイ 476d-Ahcx)
2024/12/11(水) 12:36:15.23ID:uq+uLBFl0 varで参照型を扱うとnullableになるのはどうにかしてほしい
196デフォルトの名無しさん (ワッチョイ 87ae-pQ4B)
2024/12/11(水) 13:56:36.44ID:pPQiPOka0 推論型なんだし、必要に応じて使えばいいんじゃね?
objectならともかく
objectならともかく
197デフォルトの名無しさん (ワッチョイ df6c-Fa9A)
2024/12/11(水) 14:39:24.72ID:1I783KxU0 varが絶対必要なのって匿名型使うときだけだから、必要に応じて使う、だとvarはほとんど用無しになっちゃう
戦争に参加するつもりはないが仮にvar使うんなら必要に応じてじゃなく基本varにしないと
戦争に参加するつもりはないが仮にvar使うんなら必要に応じてじゃなく基本varにしないと
198デフォルトの名無しさん (ワッチョイ 6756-2ZNr)
2024/12/11(水) 14:54:27.03ID:9MAiYNgK0 c#は基本varでいいよね
多分大体のc#er?はvarじゃないときにだけ理由を気にするんじゃないかな
多分大体のc#er?はvarじゃないときにだけ理由を気にするんじゃないかな
199デフォルトの名無しさん (オイコラミネオ MMab-InQL)
2024/12/11(水) 18:36:49.06ID:SiVbJLlPM 初期に頭のいい人は一番先に varに飛び移った
その後みんな気が付いて移行した
今でも使わないのはご老人
その後みんな気が付いて移行した
今でも使わないのはご老人
200デフォルトの名無しさん (ワッチョイ 475a-NyP9)
2024/12/11(水) 19:15:48.68ID:Rq12mde/0 varばかりやわ
201デフォルトの名無しさん (ワッチョイ 7f2a-7Ydj)
2024/12/11(水) 20:38:24.59ID:pwnGkEKD0 VBのVariant最強
202デフォルトの名無しさん (オイコラミネオ MMab-InQL)
2024/12/11(水) 20:41:39.44ID:SiVbJLlPM それはないかなw
203デフォルトの名無しさん (ワッチョイ 476d-Ahcx)
2024/12/11(水) 23:21:13.31ID:uq+uLBFl0 インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
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 である可能性がある」という情報に依存してるのに少し違和感があって、より綺麗な解決策があれば知りたい
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
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 である可能性がある」という情報に依存してるのに少し違和感があって、より綺麗な解決策があれば知りたい
204デフォルトの名無しさん (ワッチョイ e701-5/pq)
2024/12/12(木) 00:16:45.29ID:7oNgfo0K0 c#スレですよ
205デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/12(木) 08:54:59.88ID:ZQ0BgCqv0 そこを別々のインターフェースとして分離するのが間違ってるだでは
飛べる飛べないも”鳥”の一要素でしょ
飛べる飛べないも”鳥”の一要素でしょ
206デフォルトの名無しさん (ワッチョイ df2b-2fXw)
2024/12/12(木) 08:59:12.98ID:cbjQHW3y0 プロパティで持てば解決
207デフォルトの名無しさん (ワッチョイ 476d-Ahcx)
2024/12/12(木) 09:20:56.04ID:m/Fq7DtI0 >>206
Nullableな IFrayable? をプロパティとして持たせて、飛ぶ鳥の場合はthisを返すようにするということ?
Nullableな IFrayable? をプロパティとして持たせて、飛ぶ鳥の場合はthisを返すようにするということ?
208デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/12(木) 09:43:51.10ID:ZQ0BgCqv0 そこだけのインターフェース化に拘るなって言ってんだよ
209デフォルトの名無しさん (ワッチョイ 476d-Ahcx)
2024/12/12(木) 10:34:43.14ID:m/Fq7DtI0 鳥とペンギンだと近すぎて例えとして微妙だった
例えば「動物のリスト」のようなデータを持ち、動物には鳥のように飛べるクラス (Flyメソッドを持つ) と、トラやライオンのように走るクラス (Runメソッドを持つ) があるといった場合
動物の一覧を持つには List<IAnimal> のような型を使うと思うけど、これは合ってるよね?
その上で動物によって違うアクションを行わせたいとする
IAnimal側に CanFly のようなメソッドを追加していくと、例えばサルのように「道具を使う動物」が後から追加された場合、IAnimalにメソッド追加が必要になり、それはBirdなどの各クラスにも影響する
Birdクラスは「道具を使う」なんてことは知らないのに、インターフェースのために CanUseTool のようなメソッドを後から追加するのは違う気がする
そうするとやっぱインターフェース分離の形になりそうで、そうなると利用側で is でキャストするのが落としどころなのかと
例えば「動物のリスト」のようなデータを持ち、動物には鳥のように飛べるクラス (Flyメソッドを持つ) と、トラやライオンのように走るクラス (Runメソッドを持つ) があるといった場合
動物の一覧を持つには List<IAnimal> のような型を使うと思うけど、これは合ってるよね?
その上で動物によって違うアクションを行わせたいとする
IAnimal側に CanFly のようなメソッドを追加していくと、例えばサルのように「道具を使う動物」が後から追加された場合、IAnimalにメソッド追加が必要になり、それはBirdなどの各クラスにも影響する
Birdクラスは「道具を使う」なんてことは知らないのに、インターフェースのために CanUseTool のようなメソッドを後から追加するのは違う気がする
そうするとやっぱインターフェース分離の形になりそうで、そうなると利用側で is でキャストするのが落としどころなのかと
210デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/12(木) 13:06:06.44ID:ZQ0BgCqv0 鳥以外にも飛ぶ(正確には滑空だが滞空することに変わりはない)動物は居るし
鳥だって地面をRunするヤツは居る
鳥にも、猿程でなくてもその辺に落ちてる物を道具的に使うヤツも居る
お前の例題がそもそもめちゃくちゃなんだよ
鳥だって地面をRunするヤツは居る
鳥にも、猿程でなくてもその辺に落ちてる物を道具的に使うヤツも居る
お前の例題がそもそもめちゃくちゃなんだよ
211デフォルトの名無しさん (ワッチョイ 47d7-InQL)
2024/12/12(木) 13:06:59.82ID:ZQ0BgCqv0 あといい加減余所でやれ
C#直接関係ない
C#直接関係ない
212デフォルトの名無しさん (ワッチョイ 4793-Ahcx)
2024/12/12(木) 17:51:32.06ID:pRQ+cocj0 ここの住人はC#を使っていてSOLID原則に悩まされたことなど無いのだろうか
213デフォルトの名無しさん (ガックシ 06eb-7Ydj)
2024/12/12(木) 18:08:37.64ID:A8Z2cdQL6 >>203
ある動物が飛べることと、鳥であることは独立なんだから、
「飛べる鳥がいる」という情報はなくても仕方なくない?
統計的な相関関係はあるかもしれないが、包含関係でないなら仕方ない。
飛べる他の動物を無視するのなら、IBirdを継承したインタフェースでIFlyableBirdを作ればいいのでは?
ある動物が飛べることと、鳥であることは独立なんだから、
「飛べる鳥がいる」という情報はなくても仕方なくない?
統計的な相関関係はあるかもしれないが、包含関係でないなら仕方ない。
飛べる他の動物を無視するのなら、IBirdを継承したインタフェースでIFlyableBirdを作ればいいのでは?
214デフォルトの名無しさん (ワッチョイ 474b-Ahcx)
2024/12/12(木) 18:40:52.28ID:m/Fq7DtI0 ISP自体はC#でよく出てくる問題じゃないの?
これなんかまさにそう
https://dev.to/fabriziobagala/interface-segregation-principle-452m
だけどこういった解説はISP単体の説明になっていて、泳ぐ、走るといった能力の異なるものを Animal として抽象化する方法を教えてくれない
綺麗な方法でなくても「C#ではこうすることが多い」のようなプラクティスがあれば知りたかったんだけど、そういうのは無さそうなんですかね
これなんかまさにそう
https://dev.to/fabriziobagala/interface-segregation-principle-452m
だけどこういった解説はISP単体の説明になっていて、泳ぐ、走るといった能力の異なるものを Animal として抽象化する方法を教えてくれない
綺麗な方法でなくても「C#ではこうすることが多い」のようなプラクティスがあれば知りたかったんだけど、そういうのは無さそうなんですかね
215デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/12(木) 19:18:32.74ID:j5Bpxje00 実装を伴わない抽象化の話ってなんの身にもならないからやめなさい
それとインターネットサービスプロバイダの話は他所でやってくれ
それとインターネットサービスプロバイダの話は他所でやってくれ
216デフォルトの名無しさん (ワッチョイ 7f10-InQL)
2024/12/12(木) 19:18:50.89ID:F/GYmEjD0 求めてそうなプラクティスは見た事ないなぁ
個人的には、飛ぶにしても走るにしても動物という存在の態様のひとつだから
動物IFのプロパティに含めるでいいんじゃないかと思うけどね
個人的には、飛ぶにしても走るにしても動物という存在の態様のひとつだから
動物IFのプロパティに含めるでいいんじゃないかと思うけどね
217デフォルトの名無しさん (ワッチョイ 7f95-AGOF)
2024/12/12(木) 19:36:28.62ID:uARXvv9l0 var unko = new Unko()
より
Unko unko = new()
の方が良くね?
より
Unko unko = new()
の方が良くね?
218デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/12(木) 19:46:48.91ID:j5Bpxje00 もっと地球規模の視野で考えろよ
うんこも地球の一部だろ?つまりうんこは地球とも言える
わかるか?
うんこも地球の一部だろ?つまりうんこは地球とも言える
わかるか?
219デフォルトの名無しさん (ワッチョイ 7f10-InQL)
2024/12/12(木) 19:55:04.36ID:F/GYmEjD0 >>217
まぁ、後者ができるようになったの後になってからだから
まぁ、後者ができるようになったの後になってからだから
220デフォルトの名無しさん (ワッチョイ bf01-aPXN)
2024/12/12(木) 22:38:48.07ID:VQmaeBIU0 >>214
それISP単体の説明にもなってない
class Penguin : IAnimalにNotImplementedExceptionでFly()を実装すれば即ISP違反だというのは間違い
まずは原典にあたってISPを理解してきたほうがいい
謳われてる原則をどう活用するかはその後
それISP単体の説明にもなってない
class Penguin : IAnimalにNotImplementedExceptionでFly()を実装すれば即ISP違反だというのは間違い
まずは原典にあたってISPを理解してきたほうがいい
謳われてる原則をどう活用するかはその後
221デフォルトの名無しさん (ワッチョイ df2b-2fXw)
2024/12/12(木) 22:49:28.08ID:cbjQHW3y0 そもそも
そんな鳥のプログラムなんか一般的じゃねーし
そんな鳥のプログラムなんか一般的じゃねーし
222デフォルトの名無しさん (ワッチョイ 474b-Ahcx)
2024/12/12(木) 22:59:54.30ID:m/Fq7DtI0 >>220
「クライアントが『泳ぐ、飛ぶ、もしくは走る動物』として使うことを想定するのなら、そのインターフェースであるIAnimalにその情報を含めるのは適切」ということですかね
class Penguin としては Fly や Run などのメソッドの実装はノイズに思えるけど、IAnimalとして使われるなら、その契約に従えという感じかな
(それだと後から「道具を使う」がIAnimalに追加された際に Penguine もメソッド追加が必要で、そこがモヤモヤしてる)
こういう場合にアダプタ (ラッパー?) を使うのって適切?
純粋に Penguine としての機能を提供するクラスと、それを IAnimal として使うためのアダプタみたいなの
それだと更に複雑さを増すだけ?
OOP難しい……
「クライアントが『泳ぐ、飛ぶ、もしくは走る動物』として使うことを想定するのなら、そのインターフェースであるIAnimalにその情報を含めるのは適切」ということですかね
class Penguin としては Fly や Run などのメソッドの実装はノイズに思えるけど、IAnimalとして使われるなら、その契約に従えという感じかな
(それだと後から「道具を使う」がIAnimalに追加された際に Penguine もメソッド追加が必要で、そこがモヤモヤしてる)
こういう場合にアダプタ (ラッパー?) を使うのって適切?
純粋に Penguine としての機能を提供するクラスと、それを IAnimal として使うためのアダプタみたいなの
それだと更に複雑さを増すだけ?
OOP難しい……
223デフォルトの名無しさん (ワッチョイ df2b-2fXw)
2024/12/12(木) 23:02:07.06ID:cbjQHW3y0 適切とか
とりあえず作ればよくね?
適切かどうかなんてエグゼにしたら関係なくね?
それとも論点だけ考えて実際のプログラム作らないの?
それ何したいの
とりあえず作ればよくね?
適切かどうかなんてエグゼにしたら関係なくね?
それとも論点だけ考えて実際のプログラム作らないの?
それ何したいの
224デフォルトの名無しさん (ワッチョイ df6a-B4jd)
2024/12/12(木) 23:31:52.39ID:RbZTiiBk0 例が不適切だから混乱してるだけにしか見えないなぁ
225デフォルトの名無しさん (ワッチョイ ff70-Ahcx)
2024/12/12(木) 23:50:28.74ID:cAk5An+50 SOLIDが現実のコードで使われなかったり、「オブジェクト指向は問題を複雑にするだけ」みたいなことを言われる原因
226デフォルトの名無しさん (ワッチョイ 6714-oAsD)
2024/12/13(金) 01:16:53.76ID:sFncMVeV0 >>203
インターフェース分離の原則は「クラスが必要としないメソッドを実装しない」ってだけ
ペンギンのような飛べない鳥が IFlyable を実装しないのは正しい
あとは「飛べる鳥」をインターフェースで分かるようにしてやればいい
isを使う羽目になったのは飛べるかどうかわからない IBirdをListにしてるから
---
interface IBird { string Name { get; } }
interface IFlyable : IBird { void Fly(); }
// ペンギンは飛べない
class Penguin : IBird {
public string Name => "Penguin";
}
// ワシは飛べる
class Eagle : IFlyable {
public string Name => "Eagle";
public void Fly() => Console.WriteLine($"{Name} is flying!");
}
// 飛べる鳥だけを扱うリストを作る
List<IFlyable> flyableBirds = new List<IFlyable> { new Eagle() };
foreach (var bird in flyableBirds) {
bird.Fly(); // 明示的に飛べる鳥しか扱わない
}
インターフェース分離の原則は「クラスが必要としないメソッドを実装しない」ってだけ
ペンギンのような飛べない鳥が IFlyable を実装しないのは正しい
あとは「飛べる鳥」をインターフェースで分かるようにしてやればいい
isを使う羽目になったのは飛べるかどうかわからない IBirdをListにしてるから
---
interface IBird { string Name { get; } }
interface IFlyable : IBird { void Fly(); }
// ペンギンは飛べない
class Penguin : IBird {
public string Name => "Penguin";
}
// ワシは飛べる
class Eagle : IFlyable {
public string Name => "Eagle";
public void Fly() => Console.WriteLine($"{Name} is flying!");
}
// 飛べる鳥だけを扱うリストを作る
List<IFlyable> flyableBirds = new List<IFlyable> { new Eagle() };
foreach (var bird in flyableBirds) {
bird.Fly(); // 明示的に飛べる鳥しか扱わない
}
227デフォルトの名無しさん (ワッチョイ e701-5/pq)
2024/12/13(金) 01:54:21.75ID:aJRVKPMX0 こいつら病気なんか
228デフォルトの名無しさん (ワッチョイ df2b-2fXw)
2024/12/13(金) 01:55:37.37ID:0Vp4NoOf0 だね
229デフォルトの名無しさん (ワッチョイ 7f10-InQL)
2024/12/13(金) 06:18:42.75ID:ooVm180t0 SOLIDにしても所詮理想論であって現場に即してるわけじゃないしなぁ
230デフォルトの名無しさん (ブーイモ MMff-RQnm)
2024/12/13(金) 07:39:08.04ID:WeveN3pQM せやな
231デフォルトの名無しさん (ワッチョイ 27a0-tB0+)
2024/12/13(金) 17:30:15.58ID:LAtQrsJV0 サイコパスの脳の違いを発見。一般の人に比べ線条体が大きいことが判明
karapaia.com/archives/52313287.html
karapaia.com/archives/52313287.html
232デフォルトの名無しさん (スププ Sdff-AHQg)
2024/12/13(金) 20:28:57.37ID:DLDRNjlrd 関数型がいいんだね!
233デフォルトの名無しさん (ワッチョイ 7f6e-VwYf)
2024/12/14(土) 09:23:37.03ID:9hmM95L70 後から増えた「道具を使う」には何かいい感じにデフォルト実装つけとけば既存のクラスには影響しないんじゃない
234デフォルトの名無しさん (ワッチョイ bfe7-AHQg)
2024/12/14(土) 12:26:32.43ID:vNNE6Utb0 それを派生というのでは?
235デフォルトの名無しさん (ワッチョイ 4783-Ahcx)
2024/12/14(土) 12:52:03.62ID:/3oGIJ400 C# 8 からはインターフェースのデフォルト実装が使える
レスを投稿する
ニュース
- 【おこめ】ベトナムから密輸のコメを「国産」と偽り販売容疑、ベトナム人ら2人追送検…300トン売って1億3000万円稼いだか 大阪 [ぐれ★]
- 高市首相「いいから黙って全部オレに投資しろ」“進撃の巨人”のセリフで対日投資呼びかけ ★2 [おっさん友の会★]
- 【速報】長期金利、一時1.850%に上昇 ★2 [蚤の市★]
- モーニングショーで女性弁護士、「世界中の国を見渡しても日本ほど中国ともめている国は今はどこもない」「挑発しちゃっている状況」★2 [muffin★]
- 定数削減「小選挙区25・比例20」軸に検討 自民維新の両党首合意 [ぐれ★]
- 【流行語大賞】2025 T&D保険グループ新語・流行語大賞、高市早苗首相の「働いて働いて働いて働いて働いて」が年間大賞! [煮卵★]
- フィフィ「中国政府の圧力には屈しない!そう受け取りました。歌姫 浜崎あゆみの凄さに感動」 いつも強い子だねって言われ続けた [452836546]
- 一万くらいのママチャリどう?
- 国またいだネット通販 少額輸入品にも納税義務課す方向 [377482965]
- 【高市悲報】モーニングショー女弁護士「世界中の国を見渡しても日本ほど中国ともめている国は今はどこもない。挑発しちゃっている状況」 [802034645]
- 日本人がGDP5倍の軍事強国へ戦争を仕掛けてる理由、いまだ不明 [819729701]
- 高市と中国が剣呑ムードの中で、G7議長国のフランスは中国と蜜月モードに突入 [931948549]
