3

MDI Windows フォーム アプリケーションを開発しています。

ウェルカム (ホームページのようなもの) ウィンドウから、ユーザーは特定のウィンドウを開いて、注文や顧客などのエンティティを追加または編集できます。これはそれぞれ独自のモードレス ウィンドウで (MDIChild として) 開きます。場合によっては、モーダル ウィンドウで新しいレコードを追加します。

モードレス ウィンドウで Dispose() を明示的に実行していません。デバッグ中の調査によると、フォームの [閉じる] ボタンをクリックすると、Designer.cs ファイル内の Dispose() メソッドが実行され、base.Disposing メソッドが呼び出されます。閉じるボタンをクリックすると、フォームが実際に破棄されることを理解するためにそれを取ります。

ダイアログウィンドウの場合、使用ブロック内でそれらを開いています。これは、私が理解しているように、使用ブロックが終了するとウィンドウから破棄されます。

それで、私の全体的な理解とアプローチは正しいですか?

私はこれについてグーグルで調べました。さまざまなアプローチのかなり強力な支持者がいるようです。そのため、私のアプローチが問題ないかどうかは少しわかりません。

説明をいただければ幸いです。

ありがとうございます。

4

1 に答える 1

0

usingブロックに変数がありますか?あなたはかなり裕福です。そのクラスに管理されていないリソースが含まれていない限り。C#ダイアログとフォームは管理されていません。C#のほとんどすべてがマネージドメモリです。したがって、使用するだけで十分です。

using句があるので、以下は実際には当てはまりませんが、知っておくとよいでしょう

「IDisposablesは、範囲外になったときに廃棄されませんか?」いいえ。IDisposableオブジェクトがファイナライズ可能である場合(これは同じではありません)、ガベージコレクション時にファイナライズされます。これはすぐに起こるかもしれませんし、ほとんどないかもしれません。

詳細については、ここで役立つはずのたくさんの議論

C#USINGキーワード-いつ、いつ使用しないのですか?

私の現在の理解では、管理されていないリソースを使用していない限り、ガベージコレクターまたはプログラムを閉じると、メモリを再利用する必要があると判断された場合、またはプログラムが安定した状態で閉じられた場合に処理されます。

于 2012-12-21T13:51:44.697 に答える