- 1 名前:デフォルトの名無しさん mailto:sage [2023/03/26(日) 07:31:00.51 ID:2LMOL5Ty0.net]
- !extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512 次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです >>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part157 https://mevius.5ch.net/test/read.cgi/tech/1669349768/ ■関連スレ C#, C♯, C#相談室 Part97 https://mevius.5ch.net/test/read.cgi/tech/1671585518/ ■コードを貼る場合は↓を使いましょう。 https://ideone.com/ https://dotnetfiddle.net/ 初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします www.visualstudio.com/downloads/ ■情報源 https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/ https://learn.microsoft.com/en-us/dotnet/standard/class-libraries https://referencesource.microsoft.com/ https://source.dot.net/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html ++C++; // 未確認飛行 C https://ufcpp.net/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 214 名前:デフォルトの名無しさん (ワッチョイ a9e5-/aea) mailto:sage [2023/04/11(火) 15:35:49.07 ID:bVzsGz390.net]
- amdは許して
- 215 名前:デフォルトの名無しさん (ワッチョイ c5ae-izbf) mailto:sage [2023/04/11(火) 15:57:37.42 ID:E8WJry610.net]
- 経済学部とかならOS関係なくクラウドで全部出来るけども、
情報系なら機器制御とかもやるから、OS問わずは無理だろ
- 216 名前:デフォルトの名無しさん (ワッチョイ eebb-9Wvd) [2023/04/11(火) 17:07:55.85 ID:xhbQUVf+0.net]
- 授業内容によってはMac非推奨もあり得るだろう
ただどこの大学のどの学部なのか書かないことには、何に向かないのか参考にもならないだろう
- 217 名前:デフォルトの名無しさん (ワッチョイ 6e7b-k+0N) mailto:sage [2023/04/11(火) 18:13:31.92 ID:SxJtNgeT0.net]
- ワッチョイ 6e10 3回
サクッテロロ Spd1 ワッチョイ 495f ワッチョイ a9e5 オッペケ Srd1 ワッチョイ 412d ワッチョイ 4642 ワッチョイ a9e5 2回 ワッチョイ c5ae ワッチョイ eebb
- 218 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/11(火) 19:01:55.92 ID:yYayl2te0.net]
- https://books.google.co.jp/books?id=4CJdEAAAQBAJ&pg=PA112#v=onepage&q&f=false
の内容に関しての質問なんだけど、 Fooのコンストラクタをstaticコンストラクタに書き換えると、何で3 3になるの? Console.WriteLine(Foo.X); // 3 class Foo { public static Foo Instance = new Foo(); public static int X = 3; static Foo() => Console.WriteLine(X); // 3 }
- 219 名前:デフォルトの名無しさん (ワッチョイ d907-NO7/) mailto:sage [2023/04/11(火) 19:08:53.25 ID:gigFj8HV0.net]
- なんでってConsole.WriteLineが2回呼ばれてんじゃん
- 220 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/11(火) 19:14:24.00 ID:yYayl2te0.net]
- >>217
いや、だから static を付けない場合は、最初の出力は 0 なんだって で、何故 static を付けると、3 になるかという事を聞きたいわけ
- 221 名前:デフォルトの名無しさん (ワッチョイ d907-NO7/) mailto:sage [2023/04/11(火) 19:17:23.77 ID:gigFj8HV0.net]
- 何がわからんのかマジでわからん
初期化したらそれが出力されるのは当たり前じゃね?
- 222 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/11(火) 19:19:52.43 ID:yYayl2te0.net]
- >>219
で、static を付けた場合と付けなかった場合の出力結果の違いはどういう理由?
- 223 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/11(火) 19:21:27.61 ID:yYayl2te0.net]
- >>220
デフォルトコンストラクタ Foo() の直前の static の事ね
- 224 名前:デフォルトの名無しさん (ワッチョイ d907-NO7/) mailto:sage [2023/04/11(火) 19:22:18.16 ID:gigFj8HV0.net]
- どこにstaticつける話をしてるのか知らんけどクラスメンバーかインスタンスメンバーかの違い
静的コンストラクタはクラスメンバーがアクセスされる時点で初期化が終わってることが保証される
- 225 名前:デフォルトの名無しさん (ワッチョイ d907-NO7/) mailto:sage [2023/04/11(火) 19:23:14.19 ID:gigFj8HV0.net]
- >>221
それはコンストラクタじゃなくて静的コンストラクタだぞ 多分その本のもっと前に書いてある
- 226 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/11(火) 19:39:59.03 ID:yYayl2te0.net]
- >>222-223
staticを付けない、コンストラクタの場合、class Fooの最初の行でインスタンスが生成された時点では、Xが3に初期化されてないので、0になるが、 staticを付けた静的コンストラクタの場合、class Fooの最初の行とは無関係に、既にXが3に初期化された状態で Console.WriteLine(X) が実行済みなのね public static Foo Instance = new Foo(); をコメントアウトして実行させてみて、やっと気付いた 有難う
- 227 名前:デフォルトの名無しさん (ワッチョイ 4201-BePx) mailto:sage [2023/04/11(火) 23:11:43.43 ID:/nZPjbDG0.net]
- 1: Console.WriteLine(Foo.X); // 3
2: class Foo { 3: public static Foo Instance = new Foo(); 4: public static int X = 3; 5: static Foo() => Console.WriteLine(X); // 3 6: } 静的コンストラクタのあるクラスの場合は 静的コンストラクタが実行される直前に静的イニシャライザが定義順で実行される 1行目のFoo.Xで静的コンストラクタがトリガーされるけど その前に静的イニシャライザが3行目、4行目の定義順で実行される 3~4行目の実行が完了してから5行目の静的コンストラクタが実行されるのでXは3 3行目のnew Foo()で実行されるのはインスタンスコンストラクタで staticがついた5行目の静的コンストラクタとは別のものになる
- 228 名前:デフォルトの名無しさん (ワッチョイ 9194-izbf) mailto:sage [2023/04/12(水) 01:51:45.88 ID:3I+WNe+L0.net]
- >>225
分かりやすい説明有難う御座いました。
- 229 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 08:44:45.21 ID:75Jdcna40.net]
- 静的イニシャライザの実行順は不定
- 230 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 08:58:31.49 ID:5OqrGPiIr.net]
- そもそもこんな使い方することってある?
こんなわかりにくい実装したらバグしか生まないだろ
- 231 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 09:17:16.51 ID:g9fBg21da.net]
- どういう順序で実行されるか解説するテキストで実験的なコードが紹介されてるだけだろ
本文が3行以上読めないやつがここで聞いただけ
- 232 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 10:30:19.47 ID:mXnPigifr.net]
- いちいち質問者を貶すようなことでもなかろうに
- 233 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 11:26:53.10 ID:yAM4RrWLM.net]
- どちらかと言うと本文を読んでいないのが >>229 でみんな雰囲気で答えてるだけ
英語嫁
- 234 名前:デフォルトの名無しさん (アウアウウー Sa05-NO7/) mailto:sage [2023/04/12(水) 12:21:14.58 ID:bugel0eha.net]
- バグしか生まない実装を紹介する本ねぇ
読んだと自称するやつにはそう見えるのか 春だなぁ
- 235 名前:デフォルトの名無しさん (ブーイモ MM66-Udzl) mailto:sage [2023/04/12(水) 12:29:42.24 ID:USOc3PY3M.net]
- 実際質問の出力結果示さずにこのスレの連中にstaticありなしの出力結果予想させたら3割も正解しなさそう
- 236 名前:デフォルトの名無しさん (オッペケ Srd1-ZlFW) mailto:sage [2023/04/12(水) 12:31:58.00 ID:gsM5MkRcr.net]
- そういう意味ではアンチパターンだな
- 237 名前:デフォルトの名無しさん (オッペケ Srd1-HvLO) mailto:sage [2023/04/12(水) 13:45:09.09 ID:4Can4aDGr.net]
- C#の挙動がなぜそうなってるかの理由を知ることと、それを実際に開発に使用するかどうかは話が別だろう
当の本もこの挙動を利用して実装しろと勧めてるわけでもなし、バグしか生まない~などと腐すのも筋違い
- 238 名前:デフォルトの名無しさん (ワッチョイ 4201-BePx) mailto:sage [2023/04/12(水) 14:11:43.79 ID:uWUQySNG0.net]
- 本に書いてあるコードでは>>225の5行目にstaticはついてない
3行目と4行目を入れ替えると出力結果が変わるようなことになるという注意を促して イニシャライザの実行順序を理解させようとしている static fieldの定義順に依存したコードはアンチパターンと言ってもいい気はするが 現実には↓こういうコード書く人がいるので動きを理解してることは重要 https://stackoverflow.com/questions/54692923/
- 239 名前:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p) mailto:sage [2023/04/12(水) 17:54:22.82 ID:lYmUspEYM.net]
- 本にはこのコードのstaticはついてないのでいくら読んでもそういう話にはならない
コード提示した人が自分でstaticつけて疑問に思ったことを書いてるだけ チャンと英語読めば批判してる人の脊髄反射でしかないとわかる
- 240 名前:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p) mailto:sage [2023/04/12(水) 17:57:59.05 ID:lYmUspEYM.net]
- >>232
英語嫁と上で書いてやったのに読まない馬鹿
- 241 名前:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p) mailto:sage [2023/04/12(水) 18:00:18.84 ID:lYmUspEYM.net]
- >>232
ごめん自分が読めてなかった 自分が馬鹿だったわ…
- 242 名前:デフォルトの名無しさん (ワッチョイ d907-NO7/) mailto:sage [2023/04/12(水) 21:13:56.15 ID:75Jdcna40.net]
- 草
- 243 名前:デフォルトの名無しさん (ワッチョイ c5ae-izbf) mailto:sage [2023/04/13(木) 17:15:29.58 ID:Zu8K3N7a0.net]
- 過去にはAny CPUを選ぶと32bitライブラリか64bitライブラリかわからなくてエラーになる事があるから、
x86かx64に固定するのを推奨とかどこかで見た気がするけど、 今はそんな事無くなったのかな?
- 244 名前:デフォルトの名無しさん (ワッチョイ c7e5-S3w6) mailto:sage [2023/04/18(火) 09:43:52.47 ID:8GgykzJw0.net]
- ifで非null判定してからアクセスしてんのにnullの可能性がありますとか警告出す最近のC#はほんとクソ
- 245 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/18(火) 09:47:05.00 ID:zIS6YJzM0.net]
- >>242
出さねーよw
- 246 名前:デフォルトの名無しさん (ワッチョイ bfda-wFhX) mailto:sage [2023/04/18(火) 10:17:07.64 ID:HhMbwi3l0.net]
- コンパイラのnullチェックを混乱させる凄い(≠素晴らしい)コードなのかもしれない
- 247 名前:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI) mailto:sage [2023/04/18(火) 10:21:16.50 ID:dDei21Qyp.net]
- 見落としてる分岐があるだけだろ
- 248 名前:デフォルトの名無しさん (アウアウウー Sacb-uZLY) mailto:sage [2023/04/18(火) 10:22:53.46 ID:HoHH5EgOa.net]
- 多分チェックした後に別の値を代入するか値が変化するものを使ってるんだろうな
たとえばプロパティは一回目のアクセスと二回目のアクセスで同じ値が得られるとは限らない 変数に入れろ そしたら多分警告消えるから
- 249 名前:デフォルトの名無しさん (ワッチョイ dfbd-baic) mailto:sage [2023/04/19(水) 07:26:32.14 ID:9LVfV8Mo0.net]
- 警告が消えるのに時間がかかったり、Visual Studioを立ち上げ直したら警告が消えたことがある。
- 250 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/19(水) 07:56:31.56 ID:A9DJak9S0.net]
- マシンが遅いだけ
- 251 名前:デフォルトの名無しさん (ワッチョイ bf42-sFbk) mailto:sage [2023/04/19(水) 08:18:39.49 ID:/RLG/xCj0.net]
- 不必要なhoge?.hage();が残っているとnull判定されることがあるね
?取るとワーニングが消える
- 252 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/19(水) 09:00:29.09 ID:A9DJak9S0.net]
- hoge?.hoge()はhoge!=null?hoge():nullと同じ
nullが返る可能性があることを示すコードだからそりゃnullの可能性があると判定されるわな
- 253 名前:デフォルトの名無しさん (ワッチョイ bf42-sFbk) mailto:sage [2023/04/19(水) 09:16:28.63 ID:/RLG/xCj0.net]
- >>250
問題はhoge?.hoge()のところではワーニングが出ずに、離れた場所にあるhoge.bar()でワーニングが出るから 知らないと混乱するってことだね
- 254 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/19(水) 09:45:55.68 ID:A9DJak9S0.net]
- そこで問題がないのに出るわけないじゃん
離れた場所にあるなら一度変数に入れなよ そしたらnullの可能性があるかどうかマウスホバーで教えてくれるから
- 255 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/19(水) 09:47:07.48 ID:A9DJak9S0.net]
- 結局この警告はバグを潰してくれてるものだから文句を言うのは筋違いだぞ
本来なら警告の代わりに実行時エラーになってたものだからな
- 256 名前:デフォルトの名無しさん (ワッチョイ bf42-sFbk) mailto:sage [2023/04/19(水) 10:04:51.79 ID:/RLG/xCj0.net]
- >>252
コンストラクタなどで初期化していて本来はワーニングが出るはずがないのに 途中でhoge?hage()なんてコードがあるからヌルが入る可能性があると判断されるようだ だから?を外すと解決するんだが、それに築くのが大変って話ね
- 257 名前:デフォルトの名無しさん (ワッチョイ 4707-uZLY) mailto:sage [2023/04/19(水) 10:18:42.95 ID:A9DJak9S0.net]
- そこでnullを代入してるのに気づくのが大変てことはないと思うがな
警告が出ないなら大変かもしれんけど
- 258 名前:デフォルトの名無しさん (アウアウウー Sacb-uZLY) mailto:sage [2023/04/19(水) 10:25:41.00 ID:ozyRSzfKa.net]
- たとえばUnityなんかだと暗黙の代入演算子をいじっててnullでないものがnullエラーを出すよ
コンストラクタで生成してすぐnullになるオブジェクトも作れる そういうのを実行前に警告として教えてくれてるんだから親切以外のなにものでもないだろ 警告があれば何か問題があることにすぐ気づけるし気づいたらマウスをちょっと動かせば原因がわかる コーディングが簡単になりこそすれ難しくなることなんかないだろ
- 259 名前:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI) [2023/04/19(水) 10:29:18.14 ID:wTDlMyrbp.net]
- nullableなboolean変数を条件判断させるとき
nullだったらどっちに判定されるんだ?
- 260 名前:デフォルトの名無しさん (アウアウウー Sacb-uZLY) mailto:sage [2023/04/19(水) 10:43:36.85 ID:ozyRSzfKa.net]
- どっちでもない
nullはnull
- 261 名前:デフォルトの名無しさん (ワッチョイ 7ff2-iKPJ) mailto:sage [2023/04/19(水) 12:47:18.86 ID:/ifWvnPE0.net]
- 勉強になった!
- 262 名前:デフォルトの名無しさん (スプッッ Sdff-wBI8) mailto:sage [2023/04/19(水) 14:16:39.58 ID:mDR4Tmnid.net]
- (bo
- 263 名前:ol)null []
- [ここ壊れてます]
- 264 名前:デフォルトの名無しさん (ワッチョイ ff79-e5FP) mailto:sage [2023/04/19(水) 18:22:12.39 ID:oWlQU8HM0.net]
- もうnullだったら死んでくれていい
プログラムでぬらぶるってるとムカつく いいんだよ例外でもなんでも死ねば
- 265 名前:デフォルトの名無しさん (ワッチョイ ff79-e5FP) mailto:sage [2023/04/19(水) 18:32:54.51 ID:oWlQU8HM0.net]
- プログラムの99.998%は概ねnullになんかなんないところばっかりなのに
なんでこんなクソ構文作ったのかわからん 現場で書くと嫌われるコード こんなもんチェックするより他にやることはいくらでもある
- 266 名前:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI) [2023/04/19(水) 19:21:06.22 ID:Yh/qVtVOp.net]
- bool値に三状態あるのかw
- 267 名前:デフォルトの名無しさん (ワッチョイ 5f79-uE6i) mailto:sage [2023/04/19(水) 19:27:25.28 ID:Gw9y9MAb0.net]
- ヌルヌルヌールヌル
- 268 名前:デフォルトの名無しさん (オイコラミネオ MM5b-baic) mailto:sage [2023/04/19(水) 19:28:11.01 ID:ol2MoW3SM.net]
- DBだと伝統的に3値だったりが当たり前
かなり問題がある作り
- 269 名前:デフォルトの名無しさん (ワッチョイ 7f7b-i286) mailto:sage [2023/04/19(水) 19:33:27.51 ID:fW0fg9Ti0.net]
- null 許容値型
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/nullable-value-types null許容値型(Nullable<T> 型) https://ufcpp.net/study/csharp/sp2_nullable.html
- 270 名前:デフォルトの名無しさん (ワッチョイ bfe9-Naft) [2023/04/19(水) 20:30:00.61 ID:C4s4zrWJ0.net]
- FormアプリでForm1とForm2を作る
Form1にラベルを作る Form2にボタン1,ボタン2を作る ボタン1を押すとラベルに"1"ボタン2を押すとラベルに"2"を、 Form2を閉じることなく設定するプログラムを作りたいのですが どういう作り方をすれば実現できるでしょうか。 Form2にプロパティを作りForm1で文字を受け取る方法だとForm2を閉じないと値が設定できません。 よろしくお願いします。
- 271 名前:デフォルトの名無しさん (ワッチョイ 7f7b-i286) mailto:sage [2023/04/19(水) 20:35:45.45 ID:erb9d6p60.net]
- >>267
別のフォームのデータを取得、設定する https://dobon.net/vb/dotnet/form/accessanotherformdata.html
- 272 名前:デフォルトの名無しさん (ワッチョイ bfe9-Naft) [2023/04/19(水) 22:15:32.11 ID:C4s4zrWJ0.net]
- >>268
記事中のOwnerプロパティを使うことでやりたいことができました。 ありがとうございます。
- 273 名前:デフォルトの名無しさん (ワッチョイ 7f10-S3w6) mailto:sage [2023/04/20(木) 21:58:50.89 ID:XyBZLb7d0.net]
- ぬるり
- 274 名前:デフォルトの名無しさん [2023/04/22(土) 21:40:28.10 ID:nV5+mUIN0.net]
- 自作メソッドが投げる可能性がある例外の表記方法についての質問です。
ドキュメンテーションコメントの<exception>タグに、throw する可能性がある例外を表記出来ますが、 例えば下記のメソッドの場合・・・ void MyMethod(string filename) { //ZipFile.OpenRead() メソッドと、StreamReader.ReadLine() メソッドを使用する。 } 上記の場合、 ZipFile.OpenRead() は下記の例外を throw する可能性があります。 ArgumentException ArgumentNullException PathTooLongException DirectoryNotFoundException IOException UnauthorizedAccessException FileNotFoundException NotSupportedException InvalidDataException StreamReader.ReadLine() は下記の例外を throw する可能性があります。 OutOfMemoryException IOException こうなると、MyMethod() は、上記の計11種類の例外を throw する可能性があるという事になるのですが、 理想論的には、全てをドキュメンテーションコメントの <exception> に表記する必要がありますか? そうでない場合、表記するべき例外と、そうでない例外はどういう基準で判断すればよいでしょうか?
- 275 名前:デフォルトの名無しさん mailto:sage [2023/04/22(土) 22:30:09.44 ID:XuPaU8GB0.net]
- >>271
めんどくさいから例外を吐くMethodを記載して、詳細はソチラでにしちゃうかな
- 276 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 00:52:29.94 ID:qbQJEsvk0.net]
- >>271
例外なんて元々どんぶりなんだから そんな厳密に何かやろうとするなら そもそも使うなでFA
- 277 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 09:59:39.79 ID:UBkEK/lQ0.net]
- ZipFile使ってること書いてそっち参照とし、独自のは詳細書くとか?
- 278 名前:デフォルトの名無しさん mailto:sage [2023/04/23(日) 10:04:39.68 ID:DUqm0gOHM.net]
- 書いたことがない
自分で使うなら覚書として必要な範囲で 他人に提供するライブラリでも普通は書かない 使われないし必要とされてないから 常識的にそれが何をしているか想定できる場合は書かない 今だったらファイルアクセスしてますよとか引数を取りますよで利用側もある程度想像できる 標準ライブラリの例外でないものを投げる可能性があり それに回復手段がある場合に書くぐらいなんじゃないかなと
- 279 名前:デフォルトの名無しさん (ワッチョイ 6610-ASru) mailto:sage [2023/04/24(月) 06:43:49.53 ID:P+2JsUDo0.net]
- ドキュメンテーションコメントなんか書いたことないな・・・
- 280 名前:デフォルトの名無しさん (アウアウクー MM7d-pS66) mailto:sage [2023/04/24(月) 08:26:23.98 ID:F+RPKNFDM.net]
- ウチはコーディング規約で必須
どこも書いてるかと思ってたけど違うんだね
- 281 名前:デフォルトの名無しさん (アウアウウー Sa21-ZiWf) mailto:sage [2023/04/24(月) 08:47:42.51 ID:iy7IhEXOa.net]
- 今はドキュメンテーションコメント書いたらコパイロットがコード書いてくれるんじゃね
- 282 名前:デフォルトの名無しさん (ワッチョイ 3679-ByXY) mailto:sage [2023/04/25(火) 07:51:13.18 ID:kQ+fG+er0.net]
- JavadocやDoxygenってゴミにしかなんなくね?
- 283 名前:デフォルトの名無しさん (ワッチョイ a95f-SH/E) [2023/04/25(火) 08:17:55.28 ID:wOLFytDy0.net]
- >>279
成果物のかさ増しには最適なんだよw
- 284 名前:デフォルトの名無しさん (スプッッ Sdea-8Xzj) mailto:sage [2023/04/25(火) 08:42:20.58 ID:2JpsSRmdd.net]
- 詳細設計書の雛形を自動で作ってくれる…
んだぜ
- 285 名前:デフォルトの名無しさん (ワッチョイ a5e5-ASru) mailto:sage [2023/04/25(火) 08:45:42.17 ID:XCOYQ77g0.net]
- 詳細設計してからコード書いてクレメンス
- 286 名前:デフォルトの名無しさん (ワッチョイ aade-RykB) mailto:sage [2023/04/25(火) 10:50:36.92 ID:KrvjcZC00.net]
- 質問なんですが、コントロールのボタン1~9のイベントハンドラを全部実行したいとき
Button1_Click(null, null); Button2_Click(null, null); Button3_Click(null, null); Button4_Click(null, null); Button5_Click(null, null); Button6_Click(null, null); Button7_Click(null, null); Button8_Click(null, null); Button9_Click(null, null); これをもっとスマートに書く方法ありますか? それとも20個程度ならダラダラ書いたほうがいいですか?
- 287 名前:デフォルトの名無しさん (ワッチョイ 1507-ZiWf) mailto:sage [2023/04/25(火) 11:03:26.95 ID:h+X7r+oZ0.net]
- ViewModelも使わないような泥縄式プログラミングならダラダラ書けばいんじゃね
インスタンスを何らかの方法(前もって配列に入れるとかタグをつけるとか)でフィルタリングすればループが使えるし何ならイベントハンドラ自体一つにまとまるくらい同じことしかしてないんじゃないかとも推測できるが
- 288 名前:デフォルトの名無しさん (ワッチョイ 1507-ZiWf) mailto:sage [2023/04/25(火) 11:05:37.36 ID:h+X7r+oZ0.net]
- あとイベントハンドラを直接呼び出すのは良くないぞ
イベントハンドラの中から実際の処理を行う関数を呼び出すように作ってイベントハンドラを他の関数から呼びだしたい時には代わりにその処理の方を呼び出すんだ
- 289 名前:デフォルトの名無しさん (ワッチョイ 1507-ZiWf) mailto:sage [2023/04/25(火) 11:07:12.18 ID:h+X7r+oZ0.net]
- どうしてもハンドラの方を呼び出さなきゃいけない時はButton.PerformClickな
- 290 名前:デフォルトの名無しさん (ワッチョイ aade-RykB) mailto:sage [2023/04/25(火) 12:14:00.34 ID:KrvjcZC00.net]
- >>284,285,286
サンクスです、まずViewModelがわかりません。ググルとandroidやzamarinの事がヒットします。 windowsのformでプログラム作ってます。もうちょと調べてみます。 イベントハンドラの中のメソッドを呼びだすのですね、Button.PerformClickと迷ったのですが 2つの違いがいまいちわかってなくて、もらったアドバイスでもうちょと考えてみます
- 291 名前:デフォルトの名無しさん (スプッッ Sdea-8Xzj) mailto:sage [2023/04/25(火) 13:05:52.77 ID:+0i9aSeod.net]
- 適当なコレクションに入れてforeachでperformclickだな
- 292 名前:デフォルトの名無しさん (ワッチョイ aade-RykB) mailto:sage [2023/04/25(火) 17:08:17.65 ID:KrvjcZC00.net]
- >>288
レスサンクスです List<Button> buttons = new List<Button>(); for (int i = 1; i<10; i++) { Button button = new Button(); foreach (Button button in buttons) { button.PerformClick(); } こんな感じでしょうか(途中で挫折した)
- 293 名前:デフォルトの名無しさん (ワッチョイ a5e5-ASru) mailto:sage [2023/04/25(火) 17:34:19.71 ID:XCOYQ77g0.net]
- フォームに他にボタンが無いなら↓でもやれる
foreach(Control childItem in Controls) { if(childItem is Button button) button.PerformClick(); }
- 294 名前:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv) mailto:sage [2023/04/25(火) 17:41:31.18 ID:jwlAeKCmM.net]
- まずボタンから処理を分けようか?
リファクタリングでメソッドに書き直そう private void Button_Click(object sender, Args e) { //ここは実際に何かやってるが仮にコメントにしてある // //ここまで } 仮にこんなコードだとして //から始まる3行を選択して右クリックすると出てくるメニュー上の方に "クイックアクションとリファクタリング" というのがあるから それをクリックすると "メソッドを抽出する" と言うのが出てくるので選ぶ そのあとメソッド名をつけるだけでイベントハンドラじゃなくて単純なメソッドになる ボタンをクリックしたと言う名前じゃなくて処理にあった名前にできるしそうするべき いちいちボタンNが何をしていたか調べたり覚えなくて済む こういうふうにしてあちこちの処理を簡単にメソッドにできるので 処理の区切りでメソッドにしよう 処理に名前を付けて流用できるようにしよう
- 295 名前:デフォルトの名無しさん (ワッチョイ aade-RykB) mailto:sage [2023/04/25(火) 20:49:06.41 ID:KrvjcZC00.net]
- >>290
レスさんくすです こんなシンプルにかけるんですね、ちょと理解がむずいところがあるけど これをもとにちょっといじくってみます >>291 丁寧な解説ありがとう なるほどイベントハンドラからメソッド切り出すのはこうすればいいのですね 他からメソッド呼び出すとき意味も分かりやすく、見通しもよくなりますね リファクタリングはやったことなかた
- 296 名前:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv) mailto:sage [2023/04/25(火) 23:36:51.46 ID:jwlAeKCmM.net]
- >>292
これだけできるとコードの書きやすさが格段に上がるよ メソッド内全部じゃなくてもいい 適当に切り出しても引数とかもちゃんとくくりだしてくれる 出来ない場合は理由があるのでそれも勉強になる 失敗してもアンドゥしたらいいだけだし
- 297 名前:デフォルトの名無しさん (ワッチョイ 3abd-/HYv) mailto:sage [2023/04/26(水) 00:00:21.94 ID:lnboBUB50.net]
- >>291
こんな機能あったんか…。知らんかった。
- 298 名前:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv) mailto:sage [2023/04/26(水) 00:31:44.42 ID:1VlSMqUTM.net]
- 他にもいろいろ機能があるよ
いろいろ試してね
- 299 名前:デフォルトの名無しさん (ワッチョイ f1e4-n/u1) mailto:sage [2023/04/26(水) 06:43:05.45 ID:aS9C8tBv0.net]
- >>291
こんな機能知らなかった 勉強になったわ
- 300 名前:デフォルトの名無しさん (ワッチョイ 6a7f-p1wa) [2023/04/28(金) 01:40:04.13 ID:EFykGfO70.net]
- ほんとVisual studioは神
- 301 名前:デフォルトの名無しさん (ワッチョイ ea79-lTfL) mailto:sage [2023/04/28(金) 01:47:14.94 ID:yqQLE+sa0.net]
- それっぽい名前を付けるのが一番面倒だから
そこは処理をAIに要約させて付けて貰う 完璧だな
- 302 名前:デフォルトの名無しさん (ワッチョイ 4954-YWDm) [2023/04/28(金) 04:28:06.22 ID:SQeM8rhL0.net]
- 非同期メソッドを実行する時「戻り値は特に必要ないが、例外は伝えてほしい」という場合、
戻り値は適当に int とかにしても問題ないでしょうか? 理想的な方法があれば教えてください。 例: public Task<int> SomeMethod() { return await Task.Run(()=> { try { //非同期で実行したいメソッド。 return 1; } catch { throw; } }); }
- 303 名前:デフォルトの名無しさん (ワッチョイ 6610-ASru) mailto:sage [2023/04/28(金) 07:28:54.39 ID:dvpYRirO0.net]
- 戻り値無くても例外は発生するぞ
ていうかthrowするだけならtry要らないだろ
- 304 名前:デフォルトの名無しさん (ワッチョイ 6663-Be6V) mailto:sage [2023/04/28(金) 07:38:28.05 ID:4gfllXQT0.net]
- public async Task SomeMethod()
- 305 名前:299 (ワッチョイ 4954-YWDm) mailto:sage [2023/04/28(金) 07:46:32.72 ID:SQeM8rhL0.net]
- >>300-301
ありがとうございます。 本当に助かりました。
- 306 名前:デフォルトの名無しさん (ワッチョイ 777c-KiN+) mailto:sage [2023/05/02(火) 15:27:13.55 ID:+P/djKKr0.net]
- >>300
以外と例外処理って勘違いしてる奴が多いんよ 例外が発生する可能性がある場所にtry catch書くべきって思ってる奴が7割ぐらい居る 正解は例外が発生した場合にリカバリー処理を書く場合に使用する
- 307 名前:デフォルトの名無しさん (アウアウウー Sa1b-gncP) [2023/05/02(火) 15:48:44.54 ID:k2jSiG28a.net]
- リカバリー処理とは?
- 308 名前:デフォルトの名無しさん (ワッチョイ 777c-KiN+) mailto:sage [2023/05/02(火) 15:54:32.37 ID:+P/djKKr0.net]
- そのままの意味どうすよ
回復や復帰を意味する言葉通り 例えば通信中に環境が悪く回線切断 例外からそれは分かるので回線が繋がりやすい場所は移動する様にメッセージを出した後に再接続して通信を続行させる
- 309 名前:デフォルトの名無しさん (ワッチョイ 7f79-tpgI) mailto:sage [2023/05/02(火) 16:24:14.51 ID:2rV8iq3c0.net]
- UIソースでtrycatch書くための仕組みだろ
返せる例外は複数も行けるけど1つしか想定してないからどんぶりの類 本処理中と終了処理があるような処理は想定外 終了処理は行われないで帰ってくる 厨房の工作キット
- 310 名前:デフォルトの名無しさん (アウアウアー Sa4f-ef8y) mailto:sage [2023/05/02(火) 16:28:46.70 ID:GVM+dlL1a.net]
- リカバリー処理とは限らんでしょ
- 311 名前:デフォルトの名無しさん (ワッチョイ 375f-Hgfr) mailto:sage [2023/05/02(火) 16:48:17.59 ID:4Yks9dbV0.net]
- まあ、自分の業務だけが全ての人は知見が狭くてかなわんなw
- 312 名前:デフォルトの名無しさん (ワッチョイ 97cf-hzXf) mailto:sage [2023/05/02(火) 17:26:39.90 ID:ID016ee+0.net]
- 復帰とも書いてるから、例外の伝播をそこで止めて通常動作に戻すこと全般を言っているんなら
大体合ってるんじゃないかな。
- 313 名前:デフォルトの名無しさん (ワッチョイ 9f4b-gncP) [2023/05/02(火) 18:28:49.42 ID:2Pbut5Rc0.net]
- 独自の例外に変換することもあるのでは
- 314 名前:デフォルトの名無しさん (ワッチョイ 3754-wHlW) mailto:sage [2023/05/02(火) 18:29:31.06 ID:yUli7OqN0.net]
- try catch はリカバリー処理とかユーザー通知も含めて、"例外が起きたら何かしたい" 時に使う物くらいにしか考えてなかったなぁ。
void Method() { try { 処理 } catch (Exception ex) { //if (この場で復旧処理したい) { 復旧処理 } //if (メソッド呼び出し元に例外が起きたことを伝播したい) { 例えば、throw する } //if (ログを出力したい) { ログ出力する } //if (別のプロセスを起動したい) { 別のプロセスを起動する } //if (その他諸々何かしたい) { その他諸々何かの処理 } }
|

|