ふらっと C#,C♯,C#(初心者用) Part147

■ このスレッドは過去ログ倉庫に格納されています
2020/02/19(水) 17:25:41.55ID:IsrGexiaF
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part146
https://mevius.5ch.net/test/read.cgi/tech/1576069931/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
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/index
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
2020/04/24(金) 01:05:13.24ID:agN2oJUo0
>>414
でも4.5はサポート切れ
416デフォルトの名無しさん (ワッチョイ d49b-Ue8b)
垢版 |
2020/04/24(金) 11:08:50.08ID:VS+6OBXT0
メソッド内でnewしたインスタンスはメソッド抜けたら破棄されるから
disposeしたりnull代入したりする必要はありません!

っていうネット記事を見たんですが本当ですか?
メソッド抜けたら破棄されるのは値型の変数だけで
インスタンスが消費するメモリは解放されないと思っていました
2020/04/24(金) 11:12:48.04ID:0XMd7UjD0
GCが気が向いたときに掃除してくれるんじゃなかったっけ?
2020/04/24(金) 11:22:24.63ID:jeeSLMOH0
Disposeやnull代入してもそのクラス自体のメモリは解放されない
C#においてはそこはガベコレの担当であって基本プログラマはコントロールできないので少なくともnull代入は完全に不要
Marshal.AllocHGlobalのような明示的に解放しなきゃいけないアンマネージドリソースを使ってる場合にはIDisposable.Disposeが必要になる訳だけど、
ただそれも明示的にDispose()を呼ばずとも一応GCによる破棄タイミングで自動的にDispose()が呼ばれるので絶対呼ばなきゃいけない訳ではない(なんかの理由でDisposeに関しては明示的に呼んだ方が良かったはずだけど)
2020/04/24(金) 11:41:15.89ID:agN2oJUo0
>>418
Disposeで破棄せずに(保険用の)ファイナライザーに任せると、実際に破棄されるタイミングがgen0→gen1みたいに後回しになっていって高コストになるからね
420デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/24(金) 12:08:50.65ID:hmKdXDZUa
>>416
ネット記事じゃなくてちょっと前のここのレスじゃないのそれw
421デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/24(金) 12:14:59.67ID:FFBNt2WCa
>>416
スコープ抜けてからでも使用される戻り値とかはそうだね
スコープ内で完結してたら?
422デフォルトの名無しさん (ワッチョイ d49b-Ue8b)
垢版 |
2020/04/24(金) 12:25:56.45ID:VS+6OBXT0
>>420
この記事だったかも

https://qiita.com/7of9/items/ed4aa75852ae92c9cc58#comment-3cd34c69333eaf1c2d1e
nullを入れるのはやめましょう。
そんなことしなくてもローカル変数なら最後に登場した箇所以降はスコープ抜けたのと同じ扱いに最適化されます。

入門書にはnullを入れるよう書いてあるのもあるのですが・・・
https://i.imgur.com/VMOSHDY.gif
423デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/24(金) 13:00:24.56ID:hmKdXDZUa
>>422
null代入は無意味は(ほとんどの場合)本当
それ言ってるのたぶんVB上がりの人
メモリーの管理はシステム任せでOK

Dispose無意味は(ほとんどの場合)間違い。
IDisposableをわざわざ実装しているのは、不要になったら可及的速やかにDisposeして欲しいから。
コンピュータのリソースにはシリアルポートみたいに数個しか存在しなかったり、拡張スロットやUSBにぶら下がってる
ハードウェアみたいに排他的にしか使用できないものがある。

そういうのは使い終わったらとっとと解放してやらないと他で使えないことになる。
IDisposableはそういう使い方を想定している
2020/04/24(金) 13:11:21.82ID:agN2oJUo0
>>422
何その画像…デタラメやん
2020/04/24(金) 13:15:41.83ID:5EQwPUhVa
間違ってはいないだろ
nullを代入しておけば、メソッドを抜ける前にGCが走った場合に早期に解放されるかもしれない
ほとんどのメソッドは一瞬で抜けるため無意味だが、極一部の長時間抜けないメソッドではnull代入は必ずしも無意味ではない
2020/04/24(金) 13:22:18.77ID:rjwoLxqDH
null代入して直後にGC.Collect呼ぶのはやったことある
古い.NETのバージョンだと、画像処理とかで巨大なオブジェクトを何度も確保しようとするとメモリ不足で落ちるケースがあった
2020/04/24(金) 13:47:27.48ID:agN2oJUo0
「インスタンスを解放するためには、b=null; とする必要があります」ってのは明らかに間違いやろ
2020/04/24(金) 13:49:36.10ID:DJ6Oa20x0
>>422
参考のためにその本のタイトルと著者を教えてもらえるかな?
2020/04/24(金) 14:38:19.92ID:+jmL6Bae0
bがこの後どのような使われ方するのか分からんことには何とも言えん
2020/04/24(金) 14:56:29.99ID:DJ6Oa20x0
この本はその1ページで説明が完結していて、そこでnullを代入しないとメモリリークが発生すると誤解されるような記述の仕方をするのは、入門書としてNGだろう。
2020/04/24(金) 15:17:25.33ID:ANXSn9cW0
>>428
右端の「4日目 オブジェクト指向(1)」という柱でググると、インプレスの『1週間でC#の基礎が学べる本』がHitするな
あってるかどうかは知らん
432デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/24(金) 15:49:58.69ID:hmKdXDZUa
10年ぐらい前、本屋で結構挑発的なタイトルのCの入門書を見つけたので
立ち読みしてみたら前書きでnullと\0を混同してる記述を見つけてひっくり返ったことがあるw

学校の教科書じゃないんで本に書いてあるからって鵜呑みにしない方がいいねこの分野は。
433デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/24(金) 16:15:17.70ID:3fWjsT92a
>>427
b=null; にしておけばいつの間にかインスタンスが解放されるかも知れません

くらいですね
2020/04/24(金) 16:28:15.46ID:qTnWiq4N0
>>425
その認識が間違いだよ
GC目的でローカル変数にnull入れるのは無意味
https://devblogs.microsoft.com/oldnewthing/20100810-00/?p=13193

ローカル変数じゃなければ意味がある場合もあるが入門書で書く内容ではない
2020/04/24(金) 16:41:13.14ID:agN2oJUo0
>>433
別にそうする必要はないから誤解を招くような記載は不要
2020/04/24(金) 17:05:36.49ID:+Mxb0Kwr0
>>418
たとえ null 代入がガペコレの契機にならなくとも、ヒューマン側では意図を明確に記述している点で、null 代入は推奨できる記述方法なのでは?
2020/04/24(金) 17:08:09.05ID:WBygUvPh0
sync;sync;sync; みたいな物か
2020/04/24(金) 17:08:16.95ID:gOoAV1SLH
>>436
こいつは馬鹿なんじゃないかと読む者に疑いを持たせる契機にはなるね
2020/04/24(金) 17:11:27.32ID:agN2oJUo0
>>436
なぜC#なのにnullを代入する必要があるのかどうか悩むことになる時点でout
440デフォルトの名無しさん (ラクッペペ MM34-3YDc)
垢版 |
2020/04/24(金) 17:13:01.95ID:pn4zFTupM
意図が明確なのと無駄な意図の表明を混同するな
シンタックスシュガー嫌いおじさんと同じ言動だと気づけ
2020/04/24(金) 17:13:39.58ID:Ln0giejY0
人間側に意図を伝えたいならコードじゃなくてコメント書けよ
不要なコードを記述することが推奨なんかされるわけがない
2020/04/24(金) 17:17:33.89ID:CQLUkzVV0
>>436
ごめんガペコレって何?
ガベコレならわかるけど
2020/04/24(金) 17:37:41.38ID:+0niyonSM
>>441
コメントで書かれても。。。
2020/04/24(金) 18:39:20.66ID:4FfGWszI0
>>418
>明示的にDispose()を呼ばずとも一応GCによる破棄タイミングで自動的にDispose()が呼ばれる
かどうかは実装によったはず

>>422,427
その画像のページ見る限り、参照が残ってたらガベコレの対象にならないって説明をしたかったんだろうな
2020/04/24(金) 18:40:18.74ID:0yikN2xQ0
今Xmlのデシリアライズの質問に答えてくれる方いますか?
2020/04/24(金) 18:56:15.41ID:qZ8JT++I0
ダメだ
447デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/24(金) 20:50:16.80ID:h9xiDvvfa
例えばCの場合ポインタをfreeした後に再利用予定無いならそのポインタにNULL代入する意味は無いが
NULL代入する習慣があるようだけどC#のnullもそんな感じで代入してるんですか?
2020/04/24(金) 20:53:13.33ID:agN2oJUo0
>>447
普通はnull代入なんてしない。ランタイムが勝手にやってくれる。
2020/04/24(金) 20:53:48.09ID:agN2oJUo0
ランタイムが勝手にメモリ解放してくれる、ね。
2020/04/24(金) 21:04:37.09ID:5Yl2wSMPM
>>447
NULL代入はバグとかで多重開放した時に管理エリアが壊れるのを防ぐため
あまりいい習慣とは思えないけどな

>>448-449
お前は何を言ってるんだよ
451デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/24(金) 21:09:13.94ID:hmKdXDZUa
>>447
上にも書いたけど、nullを入れるのは恐らくVB上がりの人
VB6はそういう文化だった

あるいはDelphi?
こっちは触ったことないからよく知らないけど
2020/04/24(金) 21:11:07.55ID:agN2oJUo0
>>450
なにかおかしいかい?
2020/04/24(金) 21:15:06.69ID:WpI80Xm2M
>>451
> 上にも書いたけど、nullを入れるのは恐らくVB上がりの人
違う
VBとCだと目的が違う

>>452
ランタイムが何を指してるのかわからんがCには勝手にヒープメモリーを解放する機能なんてない
454デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/24(金) 21:18:29.65ID:hmKdXDZUa
>>453
だからCの話はしてないのよw
メモリを解放する意図でnullを代入してるC#のコードを見たけどこれ意味あるの?
って話をしてるんでしょw
2020/04/24(金) 21:22:09.71ID:/oHWXBMTM
>>454
ああ>>447の後半の話か
そりゃすまんな
2020/04/24(金) 21:24:56.92ID:agN2oJUo0
>>453
日本語が通じていなかったようだ
2020/04/24(金) 21:56:18.12ID:ttgIjm5mM
>>456
はいはいw
2020/04/24(金) 22:52:02.97ID:xndEmFws0
VB6のガベージコレクタがうんこだった頃のトラウマのせい?
2020/04/24(金) 23:03:19.86ID:qZ8JT++I0
グローバルインスタンスホルダーを使ってるときの明示的な参照無効化だろ
ローカルじゃ意味ない
2020/04/24(金) 23:32:16.92ID:sopKw+cH0
初心者は黙ってnull代入しておけ
意味がないとか決めつけるのは10年早い
2020/04/24(金) 23:35:58.32ID:agN2oJUo0
>>460
初心者こそnull代入なんてすべきじゃない。非常に限られた特別な場合だけ。
462デフォルトの名無しさん (ワッチョイ 15cf-1Gce)
垢版 |
2020/04/24(金) 23:41:17.84ID:FbIpmtWO0
>>409
何が?
2020/04/25(土) 00:06:19.49ID:XJisoOEM0
>>451
Delphiはfreeする
2020/04/25(土) 00:53:28.01ID:un7mPScC0
ローカル変数は自動で解放されるんだからnull代入する意味がわからん
2020/04/25(土) 01:03:57.76ID:EchrqtYB0
インスタンスへの参照が残ってればGC対象にならない
と言う説明の為に適当にローカル変数を使っただけだと思う

でも読者はローカル変数にnullを入れる事が正しいと思うだろうな
2020/04/25(土) 04:46:37.14ID:5x5kZrrV0
質問です
Process.Start メソッドの処理が何故か急にやたら時間がかかるようになってしまいました。
いろいろ条件を変えて調べてみましたが、
実行ファイル(拡張子がexeのもの)を明示的に指定するとすぐ開けるようです。

開きたいファイルに関連付けされた実行ファイルを取得することで解決しそうですが
あまりにイケてないのでもっと良い解決方法を探しています。どなたかご存じないでしょうか。
467デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/25(土) 11:25:01.63ID:4nLfPOGMa
>>464
無限ループの中とか?
そもそもそういう設計ガーって話になるが
2020/04/25(土) 11:36:45.42ID:CZd/Jkgq0
「もう使わない」という意思をコードに込めているような気もする
2020/04/25(土) 14:58:43.31ID:oe63LKnP0
>>468
私もこの説を推します
2020/04/25(土) 17:31:25.70ID:ls8kshvF0
わざわざそんな意志を示さなきゃいけないようなコードはどこかおかしいとなぜ思わないのか?
2020/04/25(土) 17:57:58.43ID:duoUHH2X0
>>468
紛らわしいだけなのでNG
2020/04/25(土) 18:07:47.14ID:qFkcGRPu0
イメージとしてはこんなコードを書いてるってこと?

static void Main(string[] args)
{
var s1 = "Hello ";
var s2 = "World ";
var s3 = "of Null Assignments!!";
s1 += s2;
s2 = null;
ConcatPrint(s1, s3);
s1 = null;
s3 = null;
}

static void ConcatPrint(string s1, string s2)
{
var s = s1 + s2;
Console.WriteLine(s);
s = null;
}
2020/04/25(土) 18:46:43.43ID:Shh4d2200
s2がめちゃくちゃでかくて ConcatPrint がすごく時間がかかる処理ならs2を使わなくなった段階で null を代入するのは意味があるんじゃないか
2020/04/25(土) 19:17:42.17ID:duoUHH2X0
コンパイラでどう最適化されるのか考えてみ
475デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/25(土) 19:33:44.64ID:8r0Ych+Ea
重い非同期メソッドを呼び出す前に不要になる巨大な配列aがあるとすれば、
非同期メソッドを呼び出す前にa = nullにする意味はひょっとしたらあるのかもと思うけど、
>>474の言うとおりそういう猿仕事は本来コンパイラにやって欲しいよね

まあ、そろそろいいのではこの話題。
エクセルのオートメーションとかやる時に鬱陶しいReleaseComObjectがあるけど、
VB6ではああいう感覚でNothingを変数にいちいち入れてたんだよね。
2020/04/25(土) 20:35:52.62ID:I4zKFD3L0
メソッド中のローカルみたいな単純に追跡できる変数なら実際回収されるからね
逆に明示的に生存して欲しい場合のためにGC.KeepAliveなんてのもある
477デフォルトの名無しさん (ワッチョイ 411d-Zrcu)
垢版 |
2020/04/25(土) 20:36:20.38ID:45wIze2e0
超ブラック企業だったサイボウズが、全社員と「ザツダン」してわかった“見えない不満”の本質
https://headlines.yahoo.co.jp/hl?a=20191118-00010003-srnijugo-life
サイボウズの「100人100通りの人事制度」を実現する働き方改革とは?
https://news.mynavi.jp/article/20190902-887250/
『サイボウズ』は社員満足度の高い「働き方改革」をなぜ作れたのか
https://gendai.ismedia.jp/articles/-/67235
諸悪の根源はメールと電話 サイボウズ営業チームの“脱ブラック部署”のノウハウ
https://logmi.jp/business/articles/322356
kintone×感情認識で社員の“HP”を見える化 若手エンジニアが挑む働き方改革
https://logmi.jp/business/articles/322342
サイボウズが副業を真っ先に解禁した理由。社員や会社のメリットとは?
https://nikkan-spa.jp/1602111
毎日が「休日」か「休日明け」か「休日前」 水土日休みの週休3日ベンチャーが「理想の働き方」と話題に
https://nlab.itmedia.co.jp/nl/articles/1907/24/news039.html
2020/04/25(土) 20:48:23.53ID:qFkcGRPu0
>>473
>>434に貼った記事を読むといいよ
どの段階で回収可能になるか詳しく書いてる
479デフォルトの名無しさん (ワッチョイ 15cf-Ue8b)
垢版 |
2020/04/25(土) 20:51:29.48ID:pYNu3Cma0
>>478
日本語でおk
2020/04/25(土) 21:07:37.42ID:qFkcGRPu0
>>479
Q: 下のコードでnewしたOtherClassがどのタイミングでGC可能になるか?

1. SomeMethod()のスコープを抜けた後
2. Frob()がreturnした後
3. それ以前

class SomeClass {
...
string SomeMethod(string s, bool reformulate)
{
OtherClass o = new OtherClass(s);
string result = Frob(o);
if (reformulate) Reformulate();
return result;
}
}

答えはこちら
https://devblogs.microsoft.com/oldnewthing/20100810-00/?p=13193
2020/04/25(土) 21:10:01.07ID:UeM9CFrC0
国会をクイズ会場にするな
初心者向けスレをクイズ会場にするな
2020/04/25(土) 22:06:04.92ID:n8sMf2Gw0
横から失礼
こんな感じの特異なコードだと、解放対象とさせるためには破棄の段階でnullを入れる必要あり?
(hageをforの中で定義してしまえば1回目の処理後に解放対象とされるだろうけど)

Hoge hage; // hage定義
for(int n=0;n<10000;n++) {
 if(n==0) { /* hage初期化 */ }
 // 長い処理
 if(n==0) { /* hage使用 */ }
 // 長い処理
 if(n==0) { /* hage使用 */ }
 // 長い処理
 if(n==0) { /* hage破棄 */ }
 // 長い処理
}
483デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/25(土) 23:13:57.58ID:jtuoTa4Ea
>>482
ちょっと何言ってるのか
>/* hage初期化 */
で毎回Hogeのインスタンスを作ってるならインスタンスが変数hageから参照されなくなった時点で
GC対象でしょう
nullいれて何の意味があるの?
2020/04/25(土) 23:18:32.91ID:W2d10YjF0
>>483
初期化されるのはn=0の時だけ
見難いコードだ
2020/04/25(土) 23:22:38.19ID:tZZhc4pea
>>482
確実に解放対象とさせることを意図したソースにするなら「hage.Dispose();」とするべき、
もっと言えばusing(hage = new Hage()){・・・}にすべきだと思うんだけど、
なんでnullを入れるっていう発想になるの?
ソースを読む側に立ってよ、null代入でリソース解放させることを意図してるなんて初見で解釈できるわけないでしょ
それともHageがIDisposableでない?リソースをバカバカ消費するのにIDisposableになっていないとすれば
Hageクラスの設計が間違ってるんでそんなクラスはゴミだと思ってぜんぶ廃棄するのが正しい

using構文だってC#2.0の頃にはもう存在してたし、
VBみたいないちいちNothingを入れる文化なんて20世紀のやり方だし、
nullを代入することに意味があるとか言ってる奴らの脳みそには
メインメモリがいまだに数十MBしか詰まってないと思って無視していいと思う
2020/04/25(土) 23:32:05.95ID:CeBC06vz0
>>485
リソースの破棄とメモリの解放をごっちゃにされても困るんだが
2020/04/26(日) 00:28:54.90ID:1XpAbCKg0
hage.Dispose()でhage自身が解放対象となりましたっけ?
分かりづらいので>>482 のクソコードを少し訂正して配列にしてみます

×Hoge hage; // hage定義
○double[] hage; // hage定義

× if(n==0) { /* hage初期化 */ }
○ if(n==0) { hage = new double[3840*2160]; /* hage初期化 */ }
488デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/26(日) 00:47:35.12ID:v/oAUwR6a
>>484
あw

>>487
そもそも論としてループで毎回無駄な判定をするのは無駄だし可読性も悪い。
素直に初回だけ分けて書こうよ。

同じ処理を二度書くのは保守性の観点から一般的には悪手だけど、>>482よりマシでしょう。
2020/04/26(日) 01:31:28.57ID:6V39WOnVa
>>487
長ったらしい処理+クソデカい配列をいじくりまわす処理で地獄のようなクソコードになりそうだ
繰り返しになるけどリソース(メモリリソース含む)を莫大に消費する処理ならIDisposableとして実装されるべきだし
リソースの解放はDispose()に記述されるべき
>>482>>487のなら配列を扱う部分を別クラスに分けたほうがマシだろう、どうせn==0のとき以外は配列いじらないんだし
class HogeClass : IDisposable {
 double[] hage = new double[3840*2160];
 public HogeClass() {
  // 生成時に必要な処理
 }
 /// hage破棄時に呼び出し
 public void Dispose() {
  hage = null;
 }
 /// hage使用時に呼び出し
public void Method(・・・) {
  // その他配列をいじくりまわすために必要な処理各種
 }
}
2020/04/26(日) 04:32:34.57ID:Rz7+bFFLa
旧バージョンのC#をお守りする仕事から何とか逃れたい…
2020/04/26(日) 05:07:29.90ID:flVxc/260
C#フォームプログラムを0から覚えたくて猫でも分かるサイト見てたんですが
7、8章辺りから説明が雑になってきて分からなくなってしまいました。
もう少しわかりやすく順序立てて解説してるサイトはないでしょうか?
2020/04/26(日) 10:18:15.48ID:NUpBHqGl0
これを雑だと言うのなら他サイト見ても全部雑だと文句言いそう
2020/04/26(日) 10:29:18.48ID:BFeJAfYX0
>>491
具体的には何がわからないの?
494デフォルトの名無しさん (ワッチョイ 15cf-Ue8b)
垢版 |
2020/04/26(日) 10:54:27.48ID:LGlXzGY70
>>489
disposeはインスタンスを破棄するメソッドじゃない
2020/04/26(日) 11:33:08.73ID:veb1rsQN0
猫はなんか見づらい、というか目がちかちかする。
496デフォルトの名無しさん
垢版 |
2020/04/26(日) 11:46:54.16
あのサイト2000年頃からあったよな
作者は50代くらいか
2020/04/26(日) 13:34:47.59ID:1XpAbCKg0
>>482,487です
質問の仕方が悪かったみたいです

参照を切るやり方やループの作りとかはどうでもよくて
/* hage破棄 */
の段階でhage=null;を入れた場合は、すぐに解放対象とさせることが出来るが
そのまま保持していた場合は、少なくともループ中では解放対象にはならない
というようなことが知りたかったのです

変な質問に付き合わせてすみませんでした
2020/04/26(日) 13:39:25.82ID:BFeJAfYX0
>>497
null代入なんて初心者は考えなくていいよ
2020/04/26(日) 13:55:39.53ID:bgNhzTiH0
>>497
試せばわかるよ
https://dotnetfiddle.net/1cjY1F
(※最適化が必要なのでReleaseモードで)
2020/04/26(日) 14:58:49.24ID:1XpAbCKg0
>>499
意図したとおりの動きが確認できました
別件で不安のあったところも、GCクラスで確認できそうです
ありがとうございました
501デフォルトの名無しさん (ワッチョイ ee90-HPZ2)
垢版 |
2020/04/26(日) 17:35:11.55ID:QqkrbzyN0
C#使ったデータ保存で手軽にできる方法ってどういった方法でしょうか?
外部ライブラリ使ってもDB使っても構いません
やっぱりEntity Frameworkでしょうか? それともxsd作ってxmlシリアライズの方が良い?
2020/04/26(日) 17:59:27.42ID:MQj0O2FGM
>>501
json
2020/04/26(日) 18:28:11.42ID:flVxc/260
>>493
Graphics g = e.Graphics;
graphicsプロパティで変数gを宣言してeのグラフィックプロパティを代入とか意味がわからないです
これをするとDrawなんちゃらって関数呼ぶときに文章が短くなるのは何となく分かるのですが
この著者のコンソール編でプロパティにプロパティを代入とか習わなかったから具体的にどういう状態になってんのか分かりません。
後は関数呼び出すときに仮引数に g.DrawLine(new Pen()とかやってますが仮引数でnew クラス型 とかやる手法はこの著者のページでは習ってないはずなのに
何の説明もなく使っていて理解できませんでした。
他にもたくさんありますが、ただただ真似して書けばいい感が強くて理屈で理解できませんでした
504デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/26(日) 18:37:36.62ID:jo9Gp3qca
>>503
ここは質問スレだよw
愚痴は本人に直接伝えた方がいいと思うよ。ここで言ってもしょうがないでしょ。

一般論として、プログラミングの学習では分からないところでいちいち立ち止まってぐだぐだ考えるより
きっと後で何となくわかるようになるだろうと気軽に考えて先に進む方が効率がいいと思うよ。
2020/04/26(日) 18:48:31.90ID:fQRF26+R0
>>503
C#はクラス名とプロパティ名が被ってても良いから、前半の左と右のGraphicsの意味は違う
Graphicsクラスの変数gを定義してeのGraphicsプロパティ(型はGraphicsクラス)を代入してる

後半は
Pen pen = new Pen();
g.DrawLine( pen );
を1行で書いてるだけ。
2020/04/26(日) 18:55:17.00ID:bZwoQ/xt0
そのレベルで不親切だって言うならwebで満足できるものは少なくとも日本語では存在しないんじゃないかな?
書籍でも怪しいと思うけど
プログラムなんてとりあえず真似して書いてその後で色んなところいじってみて動作見て覚えていくもんだと個人的には思ってる
2020/04/26(日) 19:01:21.31ID:flVxc/260
>>505
なるほど。変数gの何のフィールドにプロパティを代入してるか分かりませんが
何となくわかった気がします。
仮引数でnew クラス型とするのは省略形として使えるのですね。
全然言及されてなかったので助かりました。ありがとうございます
508デフォルトの名無しさん (ワッチョイ ee90-HPZ2)
垢版 |
2020/04/26(日) 19:18:30.96ID:QqkrbzyN0
>>502
ありがとうございます
調べてみたいと思います
509デフォルトの名無しさん (ブーイモ MM5e-enkp)
垢版 |
2020/04/26(日) 19:18:56.74ID:VvmvgJTZM
>>502
それなに?13日の金曜日に出るやつ?
510デフォルトの名無しさん (アウアウウー Sab5-BpYI)
垢版 |
2020/04/26(日) 19:19:43.16ID:jo9Gp3qca
>>505の人は機能的に等価だと言ってるだけで省略形なんて言ってないし、そんな風に考えるのは間違ってるよw
2020/04/26(日) 20:19:36.23ID:Qe5iBT5s0
サンプルを一行一行丁寧に解説してほしいってか。。
贅沢やのお
2020/04/26(日) 20:34:57.68ID:PGzBFzsM0
まあでも気持ちはわかるわ。おれも初心者の頃はそんな所があった。後から理解は追いついてくるもんだけど、点と点が線になるには、点(小さな知識)を積み上げていくしかないからなあ
2020/04/26(日) 20:39:40.62ID:MuBSif2v0
paralell.forで並列処理しながら
同時にプログレスバーを更新したいんですが
どうやったらいいのか、というか可能なのでしょうか?
514デフォルトの名無しさん (ワッチョイ 382d-JoBq)
垢版 |
2020/04/26(日) 20:47:48.75ID:h+uhH0sS0
ついでに余計なことを教えて欲しいんだけどさ
こう言うローカル変数に代入しなおすのって、やると参照強度は変わるもんなのかな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況