C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■91541 / )  Re[12]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 (2221回)-(2019/07/04(Thu) 15:18:05)
2019/07/04(Thu) 15:29:28 編集(投稿者)

No91540 (kiku さん) に返信
> textBox1.Font = f1;
> 上記のsetterで新しいインスタンスが生成されるという
> ことは考えられないでしょうか?

仮に setter でインスタンスが生成されていたとしても、
それと別に、getter で毎回生成されていることは間違いないかと。


using (var txt = new TextBox())
{
 // CE 環境においては "違う" らしい
 MessageBox.Show(ReferenceEquals(txt.Font, txt.Font) ? "同じ" : "違う");
}
using (var txt = new TextBox { Font = null })
{
 // "not null" と表示される
 MessageBox.Show((txt.Font == null) ? "null" : "not null");
}



No91539 (魔界の仮面弁士) に追記
> var f1 = new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular);
> var f2 = new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular);
> f2.Dispose();
> button1.Font = f1;
> button2.Font = f2;
> button1.Font.Dispose();
>
> .NET Compact Framework の場合は、button1 だけが新しいフォントになります。
> button2 の方は以前のフォントのままレンダリングされていました。

違ってました。

デザイン時に別のフォントを指定してから実行してみると、
button2 のフォントが変化する様子が確認できたので、
button2 が「以前のフォントのまま」で変化しないという推察は誤りですね。

Control.Font プロパティに「Dispose 済みの Font」や「null」が渡された場合、
『既定のフォントがセットされる』という動作になっているようです。
返信 編集キー/


管理者用

- Child Tree -