通常、答えは「コードが呼び出すとき.Dispose()
」です。これは通常、「ブロックを離れるとき」を意味しusing
ますが、一部のコードには、破棄される原因となる追加のものがあります。たとえば、winform でShow()
メソッドを使用して表示すると、フォームが閉じられたときに破棄されます。
でも!で表示されるフォームの場合ShowDialog()
、これは行われません。結局のところ、これはモーダルであるため、予想される寿命は明らかです。
using(var df = new DialogForm())
{
df.ShowDialog();
if(df.Age >= 18)
{
//do stuff
}
}
またはそれ以上:
int age;
using(var df = new DialogForm())
{
df.ShowDialog();
age = df.Age;
}
if(age >= 18)
{
//do stuff
}
の戻り値をチェックして、ShowDialog()
キャンセルされたかどうかなどを確認することもできます。
しかし、質問に直接答えるには、質問のフォームが適切に破棄されることはありません。IDisposable.Dispose()
メソッドが呼び出されることはありません。
ガベージ コレクターはある時点でそれを見つけ、組み込みパターンを呼び出すfinalizerを呼び出しますが、これは winforms の実装の詳細であり、適切な処理ではありません。Dispose(bool)
次の MSDNShowDialog()
も参照してください。
フォームがモーダル ダイアログ ボックスとして表示されている場合、[閉じる] ボタン (フォームの右上隅にある X の付いたボタン) をクリックすると、フォームが非表示になり、DialogResult プロパティが DialogResult.Cancel に設定されます。非モーダル フォームとは異なり、Close メソッドは、ユーザーがダイアログ ボックスのフォームを閉じるボタンをクリックしたり、DialogResult プロパティの値を設定したりしたときに、.NET Framework によって呼び出されません。代わりにフォームが非表示になり、ダイアログ ボックスの新しいインスタンスを作成せずに再度表示できます。ダイアログ ボックスとして表示されるフォームは閉じられるのではなく非表示になるため、フォームがアプリケーションで不要になったときに、フォームの Dispose メソッドを呼び出す必要があります。