C♯相談室 Part10

このエントリーをはてなブックマークに追加
952名無しさん♯:03/08/19 12:16
>>951
メンバ変数 textBox1 を public にするのはあんまり良くない。
textBox1.Text を書き換えるようなメソッドもしくはプロパティを書いて、
それを public にしろ。
φ(..)メモメモ...

Buffering .NET Console Output (by Chris Sells)
http://www.sellsbrothers.com/spout/#Buffering_.NET_Console_Output
955デフォルトの名無しさん:03/08/20 18:16
hosyu
>>936
300の技を立ち読みしてみ。Formの相互参照つーのがある。
957デフォルトの名無しさん:03/08/20 23:34
リソースの開放に関して教えて。
IDisposable を実装したクラスを new する回数と、Dispose()が実行される回数が同じなら大丈夫と思っていい?

今 View.Detailsの ListViewで、動的に ColumnHeaderを変える 操作をしてるんだけど、ColumnHeaderが IDisposableなんで心配で心配で昼も眠れません。
たとえば以下のようにやってます。(わかる範囲で省略)

//Disposeが通るかどうかをチェックするためのクラス
class UserColumnHeader : System.Window.Forms.ColumnHeader

で、Dispose() をオーバーライドしておき…

//テストコード
ListView1.Columns.Add(new UserColumnHeader());
ListView1.Columns.Clear();
ListView1.Columns.Add(new UserColumnHeader());
ListView1.Columns.Add(new UserColumnHeader());
ListView1.Columns.Clear();
ListView1.Columns.Add(new UserColumnHeader());
ListView1.Columns.Add(new UserColumnHeader());
ListView1.Columns.Add(new UserColumnHeader());

を実行すると、アプリケーション終了までに6回オーバーライドしたDispose()が実行されないといけないですか?
>>957
それって ListView が Dispose されたときに
ColumnHeader の Dispose 呼んでくれてる気がする。
959デフォルトの名無しさん:03/08/21 03:05
>>958
ListViewのDispose()では、最後の3つしか開放してくれません。
※Clear()されたColumnHeaderは、すでにListViewの管理外なので
そんなの開放する必要あるのか疑問
GCに任せちゃえばいいんじゃない
) <でぃすぽ
962デフォルトの名無しさん:03/08/21 09:18
W e b M a t r i xでも苦しいながら日本語つかえるぞ。
ttp://www.geocities.co.jp/SiliconValley-SanJose/6237/

祝あげ
963957:03/08/21 10:15
>>960
GCではDisposeされないという話をしているんです。
>>963

何のために Finallizer があるの? って話では?
this.Forcus();
これって自分にフォーカスが中るだけで、以前のフォーカスを外してくれないんだね・・・。
バグっぽいけど
966963:03/08/21 12:31
>>964
サンプルでは6回ですが、実際は何度 ColumnHeaderを追加・削除するかわかりません。
なので明示的にDisposeさせたいんですが。
967デフォルトの名無しさん:03/08/21 12:42
clear()でdisposeされるんじゃない?
The C# Design Process
A Conversation with Anders Hejlsberg, Part I
http://www.artima.com/intv/csdes.html

The Trouble with Checked Exceptions
A Conversation with Anders Hejlsberg, Part II
http://www.artima.com/intv/handcuffsP.html
>>967
されたら質問しないんですが。
>>969
悪いことは言わん。勝手に解放してくれるから放っておけ。
生意気言う暇があったら逆アセソースでも見ろよ。夏厨かお前?
>>970
その動作は確認してるのか?
そういう考えがメモリリークを生む気がするのだが。
GCだって万能じゃないってことをお忘れなく。
>>971
追加削除繰り返してメモリリークが本当に起こるか確かめてみたら?
対策はそれから考えても遅くないでしょ
>>971
考え?逆アセソースを見るというのは行動だぞ。
確認してるのか?じゃないだろ。お前が確認しろって言われてんだろ。夏厨かお前?
盲目的にM$を信じろと言われてもな
>>970
質問した本人です。
明示的にDisposeしたいという話なんですけど。
>>970
逆アセなんかするのはお前みたいなオタクだけ。
結局、誰も答えられないと。
978デフォルトの名無しさん:03/08/21 19:50
夏厨祭り
979デフォルトの名無しさん:03/08/21 19:59
ソースも公開されてないものの動作を信用しろなんて無理な話。
オプソマンセー
>>975
ColumnHeader[] hoge = new ColumnHeader[] {new UserColumnHeader(), .....};
ListView1.Columns.AddRange(hoge);
ListView1.Columns.Clear();

foreach (ColumnHeader h in hoge)
h.Dispose();

これくらいしか思いつかないが…
>>958 で合ってるじゃん。
無駄に調べてしまった。
>>976
ildasmも知らないお前はJavaでもやってろ。
Java no houga tukai yasui
>>983
それを言っちゃあお仕舞いだよ。
javapもあるよ
>>981
だから最後に残ったColulmHeaderだけだってば
オープンソースというだけで盲目的にマンセーしてるやつうぜー
>>987
Java のことかーーーー!!!
>>982
知らないとはいってない。
日本語わからないやつはJavaでもやってろ。
もうJavaなんか相手にしないでよ
991989:03/08/22 13:13
生意気言ってごめんなさい、ildasmって何ですか?
>>982
>>991
ジサクダサイ
993デフォルトの名無しさん:03/08/22 17:40
disposeですることは、メモリ以外のリソースを、明示的に解放しなければならないとき。
なので呼び出されなくても大丈夫。
994デフォルトの名無しさん:03/08/22 17:42
C#が実はC丼であることが解ったわけだが。

http://pc2.2ch.net/test/read.cgi/tech/1058618416/387
995デフォルトの名無しさん:03/08/22 18:02
記念カキコ v(^-^*)
four
中途半端に埋めないこと
最後まで埋めること
後は任せた
とってみた
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。