フォントを作成した直後に破棄するのはなぜですか? (Dispose()
もう使用しない場合は、呼び出す必要があります)。両方の例のコードを使用できます。 と を削除しても問題Dispose()
ありませんusing
。
Font f = new Font("Calibri", 10.0f);
textbox1.Font = f;
textbox2.Font = f;
label1.Font = f;
button1.Font = f;
または(コンストラクターが一種のキャッシュを管理しない限り、不要なリソースをより多く割り当てるため、効率がわずかに低下しますがFont
、それについてはわかりません):
textbox1.Font = new Font("Calibri", 10.0f);
textbox2.Font = new Font("Calibri", 10.0f);
label1.Font = new Font("Calibri", 10.0f);
button1.Font = new Font("Calibri", 10.0f);
編集
リソースの破棄について少し注意してください: もちろん、可能な限り常にリソースを破棄する必要があります (単純なルールは、常にDispose()
を実装するクラスを呼び出すことですIDisposable
)。つまり、使用前ではなく、使用後に行う必要があります。このコードを見てみましょう:
var font = font;
textbox1.Font = font;
font.Dispose();
もちろんtextbox1
、破棄されたオブジェクトへの参照があるため、機能しません(何が起こるかわかりませんObjectDisposedException
。単に無視されましたか?)。Dispose()
将来そのリソースを使用しない場合にのみ呼び出す必要があり、textbox1
そのテキストを描画するために使用されるため、そうではありません。たとえば、適切な使用法は次のとおりです。
using (var font = new Font("Calibri", 10.0f))
{
e.Graphics.DrawText(Text, font, Brushes.Black, ClientRectangle);
}
この場合、ステートメントfont
内のコードでのみ使用されusing
、適切かつ安全に破棄できます (この場合、毎回作成することを避け、再利用する必要があります)。