!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
ふらっと C#,C♯,C#(初心者用) Part150
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ 2b02-+i0H)
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0802デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/08(土) 17:41:35.40ID:oZ/joMMLd ありがとうございますm(_ _)m
#region は気を付けます
#region は気を付けます
803デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 18:05:57.33ID:jYvDj1vcd >>800
コンストラクタで例外投げたくないな
引数はフィールドにセットするだけでそれ以外は基本しない
検証するなら別のメソッドにするかコンストラクタ隠蔽して検証しつつインスタンス返すstaticなメソッド作る
コンストラクタで例外投げたくないな
引数はフィールドにセットするだけでそれ以外は基本しない
検証するなら別のメソッドにするかコンストラクタ隠蔽して検証しつつインスタンス返すstaticなメソッド作る
804デフォルトの名無しさん (ラクッペペ MMe6-kG12)
2021/05/08(土) 18:15:04.80ID:+DU/XhxNM 20年前に見たような話で頭がくらくらする
805デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 18:24:03.67ID:jYvDj1vcd まあまあ
806デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 19:33:57.25ID:6+YQB65FM >>800
普通にifで調べて、普通に例外を投げてくれ
引数がおかしいならArgumentExceptionとか適当なのあるでしょ
引数が増えるとifを書くのがしんどくなるかもしれないが、そのときは関数化しよう
そもそもDebug.Assertは滅多に使わないものと考えていい
デバッグビルドとリリースビルドで挙動が違うというのは、それだけで本番でしか発生しないバグを生みかねないものなので、可能な限り避けるべきだ
コンストラクタで例外を投げたくないとか言ってる人は、気にしなくていい
昔はそういう流派もあったんだな、とでも考えてくれ
普通にifで調べて、普通に例外を投げてくれ
引数がおかしいならArgumentExceptionとか適当なのあるでしょ
引数が増えるとifを書くのがしんどくなるかもしれないが、そのときは関数化しよう
そもそもDebug.Assertは滅多に使わないものと考えていい
デバッグビルドとリリースビルドで挙動が違うというのは、それだけで本番でしか発生しないバグを生みかねないものなので、可能な限り避けるべきだ
コンストラクタで例外を投げたくないとか言ってる人は、気にしなくていい
昔はそういう流派もあったんだな、とでも考えてくれ
807デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/08(土) 19:50:29.55ID:opSybYm9r .net frameworkのコンストラクタでもそうやってた
今のは知らん
今のは知らん
808デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/08(土) 19:57:02.17ID:opSybYm9r コンストラクタで例外投げろ
それ以外はゆるさない
XXX.Create("test");の戻り値nullチェックみたいのはバグの温床だから許さん
それ以外はゆるさない
XXX.Create("test");の戻り値nullチェックみたいのはバグの温床だから許さん
809デフォルトの名無しさん (ワッチョイ 73e3-jjtP)
2021/05/08(土) 20:01:04.70ID:Yl7KxUAk0 UnhandledExceptionの処理やるだろうしコンストラクタで例外投げてもいいと思うけどね
810デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/08(土) 20:22:02.19ID:jYvDj1vcd 最近はそうなのか
自分も認識改めるわ
自分も認識改めるわ
811デフォルトの名無しさん (ワッチョイ bb01-IK/p)
2021/05/08(土) 20:24:43.64ID:LkrBFLk10 9.0のrecordってデータベースとのやり取りに使うシンプルなクラスには積極的に使っていったほうがええんかね?
812デフォルトの名無しさん (ワッチョイ cb68-dxvU)
2021/05/08(土) 20:46:20.44ID:v+2mVqTb0 単純計算の時間って完全に比例するんですか?
繰り返し処理で
10万回 2桁同士の掛け算を行う。
12万回 2桁同士の掛け算を行う。
これって後者のほうが平均とると必ず時間がかかるんですか?
繰り返し処理で
10万回 2桁同士の掛け算を行う。
12万回 2桁同士の掛け算を行う。
これって後者のほうが平均とると必ず時間がかかるんですか?
813デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/08(土) 20:51:21.18ID:CLNCGw4K0 コンストラクタで例外投げるかどうかは宗教論争感あると思うので棚上げにしてます。質問が悪かったです
自分が聞きたいことはDebugあるいはTraceのAssertメソッドの使い所でした
>>806
使い所ないんですかね
どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
.Net1.1やその前からあるみたいなので、テストフレームワークが流通してないころに使われてた過去の遺産なのかな
自分が聞きたいことはDebugあるいはTraceのAssertメソッドの使い所でした
>>806
使い所ないんですかね
どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
.Net1.1やその前からあるみたいなので、テストフレームワークが流通してないころに使われてた過去の遺産なのかな
814デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/08(土) 22:58:15.52ID:W+LjP6QJ0 >>812
汎用PCの場合
速度なんか測ったって
その場合はそうだったんだろとしか言いようがない
裏でウィルスバスターや
セキュリティソフトや
会社の監視ソフト
WindowsUpdateなど
色んな複合要素がありすぎてみんな速度なんか測るのやめちまったよ
汎用PCの場合
速度なんか測ったって
その場合はそうだったんだろとしか言いようがない
裏でウィルスバスターや
セキュリティソフトや
会社の監視ソフト
WindowsUpdateなど
色んな複合要素がありすぎてみんな速度なんか測るのやめちまったよ
815デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/08(土) 23:37:30.49ID:6+YQB65FM >>813
検証処理が非常に高価な場合はDebug.Assertを使う理由にならんこともないが、そんなことは滅多にないよ
ほとんどの場合、検証は安価であり本番で検証をスルーしてしまうリスクとは比べるまでもない
C言語のようにほんの些細なオーバーヘッドすら嫌うような言語とは考え方が違う
検証処理が非常に高価な場合はDebug.Assertを使う理由にならんこともないが、そんなことは滅多にないよ
ほとんどの場合、検証は安価であり本番で検証をスルーしてしまうリスクとは比べるまでもない
C言語のようにほんの些細なオーバーヘッドすら嫌うような言語とは考え方が違う
816デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/08(土) 23:47:06.02ID:+76Iryda0 そもそもアサーションをいつの段階で期待してんだ
まさか実運用環境をデバッグビルドで走らせるのか
コンストラクタでの例外は、やるなっていう言語が存在するのは確かだが、宗教以前に言語の問題
C#では別に問題なかったはず
まさか実運用環境をデバッグビルドで走らせるのか
コンストラクタでの例外は、やるなっていう言語が存在するのは確かだが、宗教以前に言語の問題
C#では別に問題なかったはず
817デフォルトの名無しさん (ワッチョイ da2d-gUNg)
2021/05/08(土) 23:50:56.30ID:ef0LnTY20 Debug.Assert()はバグってる原因を探る時に、想定通りの値になっているかを確認する時に使うな
確認が終わったらソースから消すけど、万が一消し忘れても影響無いし
Trace.Assert()は使ったことない
確認が終わったらソースから消すけど、万が一消し忘れても影響無いし
Trace.Assert()は使ったことない
818デフォルトの名無しさん (ワッチョイ dabd-6gku)
2021/05/09(日) 00:29:36.29ID:qLvHom4Y0 803だけど昔「コンストラクタで例外投げたりアカンぞ」みたいなことを本で読んだ記憶があったんだがいま読み返したら完全に自分の記憶違いだった 申し訳ない
819デフォルトの名無しさん (ワッチョイ b7e4-vR7S)
2021/05/09(日) 00:51:47.19ID:RBUe6vIe0 職場でExcelVBAとACCESSをある程度動かせるようになったので、ステップアップしてC#を勉強してみたい。
勉強用のサイトやオススメの本などあったら、教えて頂けませんか?
勉強用のサイトやオススメの本などあったら、教えて頂けませんか?
820デフォルトの名無しさん (ワッチョイ cb68-dxvU)
2021/05/09(日) 01:01:53.07ID:6r3obgDk0 2D格闘ゲームって3Dのapiがなくても作成可能ですか?
何か昔っぽいゲームを作りたくなってワクワクしてます。
環境はvisualstudioです。
何か昔っぽいゲームを作りたくなってワクワクしてます。
環境はvisualstudioです。
821デフォルトの名無しさん (ワッチョイ 9f02-dxvU)
2021/05/09(日) 02:07:45.79ID:xtmxe3CZ0 誰か助けて。WebView2を使ったプログラムなんだけど
以前動くやつを作ったプロジェクトを今日久しぶりに触ったら
「System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'」
と出てまったく動かなくなってしまってた… 一行も弄ってないのに
本当に何にも触ってないんだけど一体何が悪いのか。
以前動くやつを作ったプロジェクトを今日久しぶりに触ったら
「System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'」
と出てまったく動かなくなってしまってた… 一行も弄ってないのに
本当に何にも触ってないんだけど一体何が悪いのか。
822デフォルトの名無しさん (ワッチョイ 6a79-EEf/)
2021/05/09(日) 02:15:39.31ID:KIYocDNB0823821 (ワッチョイ 9f02-dxvU)
2021/05/09(日) 02:55:26.73ID:xtmxe3CZ0 原因が分かった。プロジェクトのディレクトリを移動すると動かなくなるみたい。
でも何故なの?どこを修正したら良くなるか誰かおしえて!
でも何故なの?どこを修正したら良くなるか誰かおしえて!
824デフォルトの名無しさん (ワッチョイ 7f54-WEa1)
2021/05/09(日) 03:56:24.54ID:SmU3pbXq0825デフォルトの名無しさん (スププ Sd8a-hETr)
2021/05/09(日) 08:16:13.97ID:Bo6dSg5rd826デフォルトの名無しさん (アウアウクー MM73-+y/8)
2021/05/09(日) 09:32:19.94ID:5OOG3JrHM827デフォルトの名無しさん (ワッチョイ 0b93-/hng)
2021/05/09(日) 09:44:58.83ID:ip1MRNKD0 例外投げちゃいかんのはデストラクタでは
828デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/09(日) 12:02:06.30ID:A+xFAhosa いやコンストラクタで例外投げるな、投げたい時にはファクトリーメソッドを使え、
という議論は確かに見たことある。
自分はコンストラクタで例外投げたいと思ったことがないので興味が持てず
詳細はよく覚えてないけど、それなりに説得力はあったような気がしたけどな
という議論は確かに見たことある。
自分はコンストラクタで例外投げたいと思ったことがないので興味が持てず
詳細はよく覚えてないけど、それなりに説得力はあったような気がしたけどな
829デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/09(日) 12:22:22.59ID:SuJMzV5Hr 自分の知らんところでコンストラクタ使われたら例外拾えないとかそんな腐った理由だろう
何があってもインスタンスが帰って来る状態が欲しいんだろうがその後処理を誤ると簡単に詰む
そんな甘いことを言ってるとバグ作るだけ
何があってもインスタンスが帰って来る状態が欲しいんだろうがその後処理を誤ると簡単に詰む
そんな甘いことを言ってるとバグ作るだけ
830デフォルトの名無しさん (ワッチョイ 6ae4-vR7S)
2021/05/09(日) 12:33:09.11ID:uZxXAkBZ0 >>825-826
アドバイスありがとう!
アドバイスありがとう!
831デフォルトの名無しさん (ワッチョイ 2a63-jjtP)
2021/05/09(日) 12:44:50.59ID:2oHJe1AX0 コンストラクタで例外投げるとオブジェクトが中途半端に作成されたものがゴミとして残るからだよ
832デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/09(日) 13:18:38.53ID:6ong4OY90 ・コンストラクタで例外おきるとデストラクタが呼ばれない説
⇒確認できた
・デストラクタが呼ばれないのでGCされずにメモリリークが起きる説
⇒確認できず。list.add(new Hoge())を1000回で、Hogeコンストラクタ内で例外起こすかどうかで確認。
例外起こさなければ使用メモリ増えるけど、例外ありの方は増えない。やり方が悪い?
メモリリーク云々はC++とかの話が元みたいで、それも例外投げるなではなく投げる場合は適切に参照を削除してから投げろみたいな話だったと思うのだが、
c#の方は問題ないのか?
標準ライブラリにもコンストラクタで例外返すやつあるのでそれの実装が見たい
⇒確認できた
・デストラクタが呼ばれないのでGCされずにメモリリークが起きる説
⇒確認できず。list.add(new Hoge())を1000回で、Hogeコンストラクタ内で例外起こすかどうかで確認。
例外起こさなければ使用メモリ増えるけど、例外ありの方は増えない。やり方が悪い?
メモリリーク云々はC++とかの話が元みたいで、それも例外投げるなではなく投げる場合は適切に参照を削除してから投げろみたいな話だったと思うのだが、
c#の方は問題ないのか?
標準ライブラリにもコンストラクタで例外返すやつあるのでそれの実装が見たい
833デフォルトの名無しさん (ササクッテロロ Sp33-+yJN)
2021/05/09(日) 13:21:46.98ID:hhBpMcqQp 残って気持ち悪いとしたらDispose持ちのネイティブリソースだろうけど
そのへんクリーン書こうとしたらファクトリメソッドでもやること変わらんでしょ
そのへんクリーン書こうとしたらファクトリメソッドでもやること変わらんでしょ
834デフォルトの名無しさん (スッップ Sd8a-6gku)
2021/05/09(日) 13:23:44.08ID:rwsrdF7nd 古いガイドラインだけど
>✔ 必要な場合は、インスタンス コンストラクターから例外をスローします。
だからダメってことはないんだよね
コンストラクターのデザイン - Framework Design Guidelines | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/constructor
>✔ 必要な場合は、インスタンス コンストラクターから例外をスローします。
だからダメってことはないんだよね
コンストラクターのデザイン - Framework Design Guidelines | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/constructor
835デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/09(日) 13:33:06.24ID:6ong4OY90 ちょっと大きめのメモリ割り当てたら1回の例外発生時にGC呼び出されてるのも確認できた
836デフォルトの名無しさん (ワッチョイ 6a01-wt3T)
2021/05/09(日) 13:38:09.58ID:WHUEfE6G0 >>813
> どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
ざっくりその認識で正しいよ
内部的にはあり得ない状態ならAssert投げる
デバッグ終えたら削除とかアホのやること
注意すべきなのはassertの条件の所に副作用を含む式を書いちゃいけないことぐらい
> どんな値が渡されるのかわからない関数などは例外処理、その逆(外部に公開しない関数)の値チェックになら使えそうなのかなと思ったんですが
ざっくりその認識で正しいよ
内部的にはあり得ない状態ならAssert投げる
デバッグ終えたら削除とかアホのやること
注意すべきなのはassertの条件の所に副作用を含む式を書いちゃいけないことぐらい
837デフォルトの名無しさん (ワッチョイ aa7c-ibqQ)
2021/05/09(日) 13:42:03.78ID:yIvZIEF/0 そもそもなんでもかんでもエラー処理を例外任せにするのが間違ってるような
838デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 13:46:49.04ID:rAnETUQPM C#ではコンストラクタで例外が出るとファイナライザが呼ばれないことから
コンストラクタでは例外を出すべきでないとする派閥が昔は存在した
しかしこれが問題になるのはコンストラクタでアンマネージドリソースを確保してDisposeで解放するパターンを採用したクラスだけだ
ネイティブライブラリをPInvokeで呼び出すような低レベルの仕事では気を付ける必要があるが
そうでなければ気にしなくてよい
またそのようなアンマネージドリソースを扱う場合でもC#ではSafeHandleを実装して使うことになっている
SafeHandleを使う側はリークをことさら恐れる必要はない
コンストラクタで例外を投げてもよろしい
コンストラクタでは例外を出すべきでないとする派閥が昔は存在した
しかしこれが問題になるのはコンストラクタでアンマネージドリソースを確保してDisposeで解放するパターンを採用したクラスだけだ
ネイティブライブラリをPInvokeで呼び出すような低レベルの仕事では気を付ける必要があるが
そうでなければ気にしなくてよい
またそのようなアンマネージドリソースを扱う場合でもC#ではSafeHandleを実装して使うことになっている
SafeHandleを使う側はリークをことさら恐れる必要はない
コンストラクタで例外を投げてもよろしい
839デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 13:48:56.57ID:aeEkFGhTM >>833
例外投げるなら、その前に既にnewしたものを全部綺麗にDisposeしなきゃいけないわけだけど
そこまで考慮して正しく実装されたコンストラクタなんてドカタのコードで見たことないな
自分でthrowしなくても呼び出し先から例外が飛んでくるケースもあるから、本来は常に考慮が必要
あくまで可能性の問題としてだけど、コンストラクタで例外を投げるとDispose漏れが起こりやすいのは事実だと思うよ
漏れを完全に防げなくても、GC任せで問題にならない程度に頻度を抑えることはできる
例外投げるなら、その前に既にnewしたものを全部綺麗にDisposeしなきゃいけないわけだけど
そこまで考慮して正しく実装されたコンストラクタなんてドカタのコードで見たことないな
自分でthrowしなくても呼び出し先から例外が飛んでくるケースもあるから、本来は常に考慮が必要
あくまで可能性の問題としてだけど、コンストラクタで例外を投げるとDispose漏れが起こりやすいのは事実だと思うよ
漏れを完全に防げなくても、GC任せで問題にならない程度に頻度を抑えることはできる
840デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/09(日) 13:53:06.35ID:V90kiCWja841デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 13:53:17.09ID:rAnETUQPM >>836
プログラマが内部的にありえないと考えている状態が実際に発生するかしないかはプログラマにはわからない
それがバグというものの性質だ
バグはプログラマの意識の外からやってくる
プログラマが間違えるからバグが発生する
なので絶対に起こらないから本番では外しちゃえなどと安易に考えずに
俺の考えではまあまず起こらないと思うけどもし起こったらやばいから念の為に残しておこうと考えたほうがよい
プログラマが内部的にありえないと考えている状態が実際に発生するかしないかはプログラマにはわからない
それがバグというものの性質だ
バグはプログラマの意識の外からやってくる
プログラマが間違えるからバグが発生する
なので絶対に起こらないから本番では外しちゃえなどと安易に考えずに
俺の考えではまあまず起こらないと思うけどもし起こったらやばいから念の為に残しておこうと考えたほうがよい
842デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 13:56:13.68ID:aeEkFGhTM >>838
.NET 5以降ではCERが廃止されたからSafeHandleは意味ないよ
.NET 5以降ではCERが廃止されたからSafeHandleは意味ないよ
843デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 14:05:22.60ID:aeEkFGhTM ちなみに.NET Framework(非Core系)でもCriticalFinalizerObjectに意味があるのは複数のAppDomainを使ったアプリケーションの場合だけだよ
あまり理解されてないけど、99.9%の人には無関係な極めてニッチな機能
あまり理解されてないけど、99.9%の人には無関係な極めてニッチな機能
844デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/09(日) 14:06:37.90ID:KNQAmpF60 また空中戦やってるな
設計はどうなってるのか?もこだわらず
どう処理したいかばっかり
客がエラー扱いにしたいって言ったら
テメーの例外のこだわりなんかゴミ箱だ
逆もまた然り
設計はどうなってるのか?もこだわらず
どう処理したいかばっかり
客がエラー扱いにしたいって言ったら
テメーの例外のこだわりなんかゴミ箱だ
逆もまた然り
845デフォルトの名無しさん (ワントンキン MMda-rYak)
2021/05/09(日) 14:12:54.16ID:aeEkFGhTM いや客ってのがユーザーのことなら例外処理なんて客と無関係な純粋に技術的な問題でしょw
多重下請けならその限りではないかもしれんが
多重下請けならその限りではないかもしれんが
846デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 14:27:16.94ID:rAnETUQPM >>842
SafeHandleはCERのためのものではなく
アンマネージドリソースハンドルのラッパーを提供するための共通基盤でありCER対応はその部分でしかない
SafeHandleは依然として有用だよ
初心者は参考にするといい
https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/implementing-dispose
SafeHandleはCERのためのものではなく
アンマネージドリソースハンドルのラッパーを提供するための共通基盤でありCER対応はその部分でしかない
SafeHandleは依然として有用だよ
初心者は参考にするといい
https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/implementing-dispose
847デフォルトの名無しさん (ブーイモ MMd6-D3Lk)
2021/05/09(日) 14:30:18.11ID:rAnETUQPM もちろんオレオレハンドルラッパーをDIYしたいならそれを止める権利は俺にはない
しかし趣味ならともかく仕事ではDIYを避けたほうがいいだろうねとアドバイスだけはさせてもらおう
しかし趣味ならともかく仕事ではDIYを避けたほうがいいだろうねとアドバイスだけはさせてもらおう
848デフォルトの名無しさん (ワッチョイ 9f02-dxvU)
2021/05/09(日) 15:15:59.96ID:xtmxe3CZ0 >>824
ありがとうチェックしてみるよ
ありがとうチェックしてみるよ
849デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/09(日) 15:17:59.75ID:E0SRP95CM >>846
それは眉唾だな
docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle?view=net-5.0
例えばこのサンプル、SafeHandle派生クラスを実装した上で更にそれを適切に解放するために普通にDisposeパターンを実装してる。
これが典型的な正しいSafeHandleの使い方だ。
CERが無いなら手間とミスしうるポイントが余計に増えるだけにしか俺には思えないね。
それは眉唾だな
docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle?view=net-5.0
例えばこのサンプル、SafeHandle派生クラスを実装した上で更にそれを適切に解放するために普通にDisposeパターンを実装してる。
これが典型的な正しいSafeHandleの使い方だ。
CERが無いなら手間とミスしうるポイントが余計に増えるだけにしか俺には思えないね。
850デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:32:32.00ID:SuJMzV5Hr newしたものが綺麗にdisposeされないって馬鹿のコードだろ
そもそもが引数チェックではじいてからnewするだろ馬鹿じゃないかと
そもそもが引数チェックではじいてからnewするだろ馬鹿じゃないかと
851デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:40:33.58ID:SuJMzV5Hr .netの内部でもこんな感じで普通にコンストラクタで例外投げてる
これ以外でどうやって通知すんだよ
馬鹿者が
if (path == null)
throw new ArgumentNullException("path", Environment.GetResourceString("ArgumentNull_Path"));
if (path.Length == 0)
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
これ以外でどうやって通知すんだよ
馬鹿者が
if (path == null)
throw new ArgumentNullException("path", Environment.GetResourceString("ArgumentNull_Path"));
if (path.Length == 0)
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
852デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/09(日) 15:45:00.43ID:E0SRP95CM853デフォルトの名無しさん (オッペケ Sr33-7fsT)
2021/05/09(日) 15:49:17.16ID:SuJMzV5Hr コンストラクタで例外は投げても良い
でもおかしなことをする奴がいるからコンストラクタでは例外投げるなは暴論
でもおかしなことをする奴がいるからコンストラクタでは例外投げるなは暴論
854デフォルトの名無しさん (アウアウエー Sae2-D3Lk)
2021/05/09(日) 15:51:19.62ID:FUAnWwVaa >>849
プラットフォーム呼び出し時の参照カウントなどはどうする?
プラットフォーム呼び出し時の参照カウントなどはどうする?
855デフォルトの名無しさん (ワッチョイ ea61-LExt)
2021/05/09(日) 22:04:27.52ID:pySvIkdW0 例外はcatchして握りつぶすのが吉
856デフォルトの名無しさん (ワッチョイ a6da-XZlr)
2021/05/09(日) 23:19:09.95ID:CIQV7Tg10 async voidも多用すべし
857デフォルトの名無しさん (スップ Sd2a-5xeF)
2021/05/10(月) 07:43:24.96ID:v9qGjilad クラスとかメソッドとか分けるときの命名が大変で時間が掛かるお…
適当にそれっぽい英単語繋げてるけど、メソッド名が50文字以上になることがよくあるお…
ForとかByとかFromとかも使うとより長くなるんだお…
どうしたらいいんだお?
適当にそれっぽい英単語繋げてるけど、メソッド名が50文字以上になることがよくあるお…
ForとかByとかFromとかも使うとより長くなるんだお…
どうしたらいいんだお?
858デフォルトの名無しさん (ワッチョイ 3ebb-EEf/)
2021/05/10(月) 08:00:47.54ID:XZUy8xNJ0859デフォルトの名無しさん (ブーイモ MMd6-tepi)
2021/05/10(月) 08:05:31.40ID:AtOV5vKAM860デフォルトの名無しさん (スップ Sd2a-5xeF)
2021/05/10(月) 08:26:26.05ID:v9qGjilad861デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/10(月) 08:28:55.47ID:EOKyCo1ad862デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 08:51:24.61ID:y0jj8Ah00 引数エラー一個一個出してくわけには行かない場合例外だと処理しにくいな
863デフォルトの名無しさん (スププ Sd8a-hETr)
2021/05/10(月) 09:51:39.48ID:6ezg7cUTd コメント打つ代わりにフルスペルで命名するっていう手もあるよね。
そうすれば入力する手間は変わらない。
でも英語が見慣れてなくて辛い。
そうすれば入力する手間は変わらない。
でも英語が見慣れてなくて辛い。
864デフォルトの名無しさん (ブーイモ MMd6-tepi)
2021/05/10(月) 09:56:18.04ID:AtOV5vKAM C#は日本語ok
865デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/10(月) 12:05:19.67ID:OSpjgtmc0 命名に悩んで手が止まるのアホらしいので、一旦日本語で命名して後で英語に変えてる
866デフォルトの名無しさん (スプッッ Sd2a-5xeF)
2021/05/10(月) 12:08:15.82ID:EOKyCo1ad 下手に英語やローマ字使うより日本のプロパティ名を使った方が分かり易いこともありますな
敢えて外人だけに意味を理解しにくくさせたいときなんかにも使えそうですな
敢えて外人だけに意味を理解しにくくさせたいときなんかにも使えそうですな
867デフォルトの名無しさん (ワッチョイ 3ebb-EEf/)
2021/05/10(月) 12:21:43.63ID:XZUy8xNJ0 >>866
どんな場面を想定しているのか、すげぇ気になる
どんな場面を想定しているのか、すげぇ気になる
868デフォルトの名無しさん (ワッチョイ 6642-jjtP)
2021/05/10(月) 12:34:14.65ID:3Mkz5DyC0 enumの要素が日本語だとコメント要らずではある
本体がアルファベットならインテリセンスも問題ない
本体がアルファベットならインテリセンスも問題ない
869デフォルトの名無しさん (ワッチョイ fbad-t4JP)
2021/05/10(月) 12:37:31.60ID:85dwBuQM0 国民健康保険保険者番号、という単語を変数名にするときは、だいぶ議論した上で、
kokuho_hnoになったな。
national_health_insurance_insurer_numberはとても反発が大きかった。
kokuho_hnoになったな。
national_health_insurance_insurer_numberはとても反発が大きかった。
870デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 12:56:28.88ID:2MQuNC0ra 英語力がボトルネックになってるケースはむしろ少ない気がするね。
命名下手な人は日本語でも意味不明な名前付けそうな気がする
というより、だいたい命名以前の問題で既に失敗してるんだよね
普通のプログラマはそれが何をするメソッドなのか、「何者」なのかを
明確にしてからメソッドを書き始める。
命名で止まっちゃう人はそこがいい加減なんだよね。抽象化が出来てない。
命名下手な人は日本語でも意味不明な名前付けそうな気がする
というより、だいたい命名以前の問題で既に失敗してるんだよね
普通のプログラマはそれが何をするメソッドなのか、「何者」なのかを
明確にしてからメソッドを書き始める。
命名で止まっちゃう人はそこがいい加減なんだよね。抽象化が出来てない。
871デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 13:00:52.85ID:y0jj8Ah00 enumって継承できない?
872デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/10(月) 15:31:20.10ID:lCZGOQhNF873デフォルトの名無しさん (ワッチョイ 9f25-Fod4)
2021/05/10(月) 15:37:52.56ID:DLVUJfkF0 >>869
プロジェクト全体で使えるならnhi_insurer_numberみたいな略語ならありだと思うけどね
プロジェクト全体で使えるならnhi_insurer_numberみたいな略語ならありだと思うけどね
874デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 15:58:21.88ID:l/O9+A2Na グロサリーは作った方がいいけどNHIで辞書に載ってるから(普通何だこれと思ったらググるよね?)
それはNhiIDでいいでしょ
それはNhiIDでいいでしょ
875デフォルトの名無しさん (エムゾネ FF8a-dxvU)
2021/05/10(月) 16:21:26.47ID:lCZGOQhNF876デフォルトの名無しさん (ワッチョイ fbad-t4JP)
2021/05/10(月) 17:51:27.04ID:85dwBuQM0 俺も別に良いと思ったんだけど、とにかく反発がやばかった。
HNI_Insurer_No推しだった。
俺的には番号とついてるものにIDはまずい気がする。
HNI_Insurer_No推しだった。
俺的には番号とついてるものにIDはまずい気がする。
877デフォルトの名無しさん (ワッチョイ 2a01-Yqly)
2021/05/10(月) 17:56:24.33ID:giJ6lOgz0 kokuho_hnoだと保険者番号と被保険者番号の区別がつけにくいので
nhi_insurer_numberとnhi_numberくらいがいい気がする
kokuho_insurer_numberでも別にいいかな
nhi_insurer_numberとnhi_numberくらいがいい気がする
kokuho_insurer_numberでも別にいいかな
878デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/10(月) 18:24:14.99ID:id38dQYPr 変数名は単体で使ってるのか?
それともPersonクラスなどののメンバーなのかによって扱いが違う
それともPersonクラスなどののメンバーなのかによって扱いが違う
879デフォルトの名無しさん (スププ Sd8a-t4JP)
2021/05/10(月) 18:31:34.09ID:Jv8jAyYxd >>877
被保険者番号はhhnoという悲しいスタイルに。。
被保険者番号はhhnoという悲しいスタイルに。。
880デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/10(月) 18:37:55.44ID:l/O9+A2Na >>876
識別のために割り当てる符号は数字だろうがギリシャ文字だろうがID(identifier)でしょうw
ただ、保険者(業者)と被保険者を区別する必要があることに気づかなかった
この場合NhiIDはまずいね
まあスレ違い甚だしいな
識別のために割り当てる符号は数字だろうがギリシャ文字だろうがID(identifier)でしょうw
ただ、保険者(業者)と被保険者を区別する必要があることに気づかなかった
この場合NhiIDはまずいね
まあスレ違い甚だしいな
881デフォルトの名無しさん (ワッチョイ 2a01-Yqly)
2021/05/10(月) 18:42:01.34ID:giJ6lOgz0 hhnoかぁ
nhiもそうだけどhhnoやhnoみたいな普段の会話で使わない略語よりも
kokuho_hokensha_noとkokuho_hihokensha_noみたいに
普段の会話で使う日本語読みに寄せたほうが何かと良さそうだね
nhiもそうだけどhhnoやhnoみたいな普段の会話で使わない略語よりも
kokuho_hokensha_noとkokuho_hihokensha_noみたいに
普段の会話で使う日本語読みに寄せたほうが何かと良さそうだね
882デフォルトの名無しさん (ワッチョイ aa7c-ibqQ)
2021/05/10(月) 18:42:58.08ID:zy2rFAto0 番号なのにnoとか付けないってセンスなくね?
883デフォルトの名無しさん (JP 0H0a-aC2w)
2021/05/10(月) 18:46:43.73ID:T4WFU4KFH 被保険者番号みたいなのは
コーディング規約をいじる裁量があれば日本語変数名が最強なんだよなあ
入力はちょっと大変だけど、視認性最強でドキュメントコメント不要になるし
英字表記に悩んだり表記ゆれに煩わされることもない、変な英略語覚えるのに頭使わなくて済む
コーディング規約をいじる裁量があれば日本語変数名が最強なんだよなあ
入力はちょっと大変だけど、視認性最強でドキュメントコメント不要になるし
英字表記に悩んだり表記ゆれに煩わされることもない、変な英略語覚えるのに頭使わなくて済む
884デフォルトの名無しさん (オッペケ Sr33-jjtP)
2021/05/10(月) 18:46:58.67ID:id38dQYPr みんな業務はjavaの人なんだなと
885デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 21:46:48.97ID:y0jj8Ah00 基底クラスでenumのステータス持ってて
継承してそのステータスの種類が増えるとき
enumが継承できないとステータスの種類が増やせなくない?
継承してそのステータスの種類が増えるとき
enumが継承できないとステータスの種類が増やせなくない?
886デフォルトの名無しさん (ワンミングク MMda-rYak)
2021/05/10(月) 21:56:52.64ID:/NuMOBBIM >>885
enumは決まった値しか取り得ない型
継承して取りうる値が増えたら、それは基底クラスにおける「決まった値のみを取る」という規約を破ってしまうことになる
規約を破らずに値を追加するには、継承せず普通にenumに追加しなければならない
enumは決まった値しか取り得ない型
継承して取りうる値が増えたら、それは基底クラスにおける「決まった値のみを取る」という規約を破ってしまうことになる
規約を破らずに値を追加するには、継承せず普通にenumに追加しなければならない
887デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/10(月) 22:00:17.01ID:y0jj8Ah00888デフォルトの名無しさん (ワッチョイ 9f5f-DjaX)
2021/05/10(月) 22:38:40.75ID:8qfIqwaR0889デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 00:18:16.99ID:lKBWqYLpa 率直に言ってenumを継承するって発想自体が理解不能w
>>885
enum Eを継承してFを作れるとして、Eの型のプロパティHogeを持つクラスAを継承してBを作っても、
Hogeの型をFに変えることはできないよね?
スーパークラスでステート値を増やすって発想に無理がある気がする
>>885
enum Eを継承してFを作れるとして、Eの型のプロパティHogeを持つクラスAを継承してBを作っても、
Hogeの型をFに変えることはできないよね?
スーパークラスでステート値を増やすって発想に無理がある気がする
890デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 00:47:29.66ID:aDB05LmB0 >>889
継承してステータスの取りうる状態が増えるときはどーするの?
ステータスはenum使えってみんなが言うから使ったらこのザマだよ
所詮、プログラムなんか組んだことないアホの戯言だった
継承して増える可能性のある値はenumなんか使っちゃ駄目だってことだね
俺は一生使わないと思う
継承してステータスの取りうる状態が増えるときはどーするの?
ステータスはenum使えってみんなが言うから使ったらこのザマだよ
所詮、プログラムなんか組んだことないアホの戯言だった
継承して増える可能性のある値はenumなんか使っちゃ駄目だってことだね
俺は一生使わないと思う
891デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 01:06:35.85ID:lKBWqYLpa >>890
まずそういうケースがあんまりありそうもない気がするけどあるとして、
(1) ベースクラスを書く段階でサブクラスでありうる拡張を織り込んで予約しておく
(2) それが無理なら
enum BorderStyle {None, Single, Double, ExtendedStyle };
みたいにしておいて、BorderStyle == BorderStyle.ExtendedStyle
の時には別のプロパティでスタイルが決まるようにする
まずそういうケースがあんまりありそうもない気がするけどあるとして、
(1) ベースクラスを書く段階でサブクラスでありうる拡張を織り込んで予約しておく
(2) それが無理なら
enum BorderStyle {None, Single, Double, ExtendedStyle };
みたいにしておいて、BorderStyle == BorderStyle.ExtendedStyle
の時には別のプロパティでスタイルが決まるようにする
892デフォルトの名無しさん (ワッチョイ 2fb0-DjaX)
2021/05/11(火) 01:27:29.73ID:qWgZ839v0 > Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
> Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.")
上の書き方の場合、文字列部分を定数で宣言できたってメリットあったと思うんだけど、$使う文字列挿入だとできないよね
使い分ければ良いだけだと思うんだけど、他に冴えたやり方あったりする?
> Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.")
上の書き方の場合、文字列部分を定数で宣言できたってメリットあったと思うんだけど、$使う文字列挿入だとできないよね
使い分ければ良いだけだと思うんだけど、他に冴えたやり方あったりする?
893デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 01:28:06.43ID:aDB05LmB0 class作ってメンバでconst intにしようと思ったら
採番が面倒だから結局intになったわ
と思ったらそれもログ出力が面倒で
結局、状態クラス作ったわ
採番が面倒だから結局intになったわ
と思ったらそれもログ出力が面倒で
結局、状態クラス作ったわ
894デフォルトの名無しさん (ワッチョイ 0b2f-C7Xb)
2021/05/11(火) 01:31:27.37ID:m6WVK0Xg0 enumは基本的に定数をならべただけだから不変のものにしか使っちゃだめ
ステータスを表すクラス作れよ
ステータスを表すクラス作れよ
895デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:06:49.74ID:aDB05LmB0 >>894
不変よ
少なくともプログラムが実行されてからは
だって状態を表してるんだから
変更が必要になるのは継承で分岐するソースコードの修正作業時だけ
こういう形でenumが使えないなら
今後継承を行う可能性が少しでもあるならそのクラスではenumは一切使えないということ
実際使わないほうがいいと思う
赤青ランプを継承して
赤青黃ランプを作ったときに
状態赤青がenumで作られてたらゴミ箱にブチ込むしか道はない
不変よ
少なくともプログラムが実行されてからは
だって状態を表してるんだから
変更が必要になるのは継承で分岐するソースコードの修正作業時だけ
こういう形でenumが使えないなら
今後継承を行う可能性が少しでもあるならそのクラスではenumは一切使えないということ
実際使わないほうがいいと思う
赤青ランプを継承して
赤青黃ランプを作ったときに
状態赤青がenumで作られてたらゴミ箱にブチ込むしか道はない
896デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 02:09:51.01ID:lKBWqYLpa 挿入文字列はコンパイル時に解析される(実行時に解析されるわけじゃない)と思うので(知らんけど)
stringの変数に挿入文字列自体を入れるとかできないと思うけど、そもそも何でそんなことがしたいの?
多言語化のために文字列リソースにしておきたいという動機なら理解できるけど
変数に入れたい動機が思いつかない
stringの変数に挿入文字列自体を入れるとかできないと思うけど、そもそも何でそんなことがしたいの?
多言語化のために文字列リソースにしておきたいという動機なら理解できるけど
変数に入れたい動機が思いつかない
897デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:10:54.04ID:aDB05LmB0 >>896
ログ出力したいんじゃん?
ログ出力したいんじゃん?
898デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 02:12:53.21ID:1Lpm83JY0 >>895
enumの定義をclassの外に出して独立させれば
enumの定義をclassの外に出して独立させれば
899デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:13:54.09ID:aDB05LmB0 >>898
何の解決にもなんなくね?
何の解決にもなんなくね?
900デフォルトの名無しさん (ワッチョイ bea7-wGCM)
2021/05/11(火) 02:16:57.22ID:aDB05LmB0901デフォルトの名無しさん (ワッチョイ 5b2d-gUNg)
2021/05/11(火) 02:38:14.36ID:1Lpm83JY0902デフォルトの名無しさん (アウアウウー Sa1f-dxvU)
2021/05/11(火) 02:41:03.08ID:lKBWqYLpa だからそもそも根本的に考え方がおかしいと思うよw
集合論的に考えてみて
例えば、
自然数⊂整数
ってことは明らかに「整数 is 自然数」ではないでしょ。
自然数を継承して整数を作る、とう発想がそもそもおかしい。
集合論的に考えてみて
例えば、
自然数⊂整数
ってことは明らかに「整数 is 自然数」ではないでしょ。
自然数を継承して整数を作る、とう発想がそもそもおかしい。
レス数が900を超えています。1000を超えると表示できなくなるよ。
