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

わんくま同盟

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

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


■91572 / )  Re[18]: メモリリークに関して
□投稿者/ kiku (118回)-(2019/07/09(Tue) 10:26:26)
No91571 (魔界の仮面弁士 さん) に返信
>>foreach (var c in Controls)
>>{
>> Logger.Info(c.GetType().ToString());
>> switch (c.GetType().FullName)
>> {
>> case "System.Windows.Forms.Label":
>> ((System.Windows.Forms.Label)c).Font.Dispose();
>> ((System.Windows.Forms.Label)c).Dispose();
>
> 型ではなく型名でチェックしている点が気になりますが、それはさておき。

switch (c.GetType())
{
case typeof(System.Windows.Forms.Label):
((System.Windows.Forms.Label)c).Font.Dispose();
((System.Windows.Forms.Label)c).Dispose();

こんな感じにしてみたのですが、ビルドできなかったので、
if文の羅列になってしまいます。
好みの問題なのですが、switch文の方が見た目がきれいなので
こちらにしてみました。
swich文でも書き方によってうまくできればよいのですが。

> Form 上に Panel や TabControl 等を使用していた場合、this.Controls だけではなく
> その配下のコントロールも再帰的に処理する必要があるのではないでしょうか。
> (this.Controls[0].Controls 的な意味で)

今回のアプリでは全画面にどんなコントロールが利用されているのかを
把握しています。
コンテナとなるようなコントロールは無いことを確認しているため、
実装していません。

> マネージリソースを破棄するのは、disposing == true の時だけなのでは?

確かにそうですね。
コメントありがとうございます。
対応させて頂きます。
解決済み
返信 編集キー/


管理者用

- Child Tree -