■98339 / ) |
Re[1]: using 文とインスタンスの破棄 |
□投稿者/ 魔界の仮面弁士 (3205回)-(2021/11/02(Tue) 22:53:19)
|
■No98337 (星は昴 さん) に返信 > 98334 に続くインスタンスの生成と破棄シリーズ第3弾です(笑)。連投恐れ入ります。
IDisposable なオブジェクトは、PictureBox や Form や Timer、 OpenFileDialog や DataSet、Font や Brush や Graphics などなど多岐にわたりますが、 Dispose する必要が無いオブジェクトもあれば、利用者が迂闊に Dispose できないものもあるので 慣れるまでは分かりにくいですよね…。
とはいえ基本的には、「自分で生成した物は、もう使わなくなったら処分しろ」というルールです。 そして「他人が生成したもの」や「他でまだ使っているオブジェクト」は、勝手に処分してはいけません。
> if (Pb.Image != null) > { > Pb.Image.Dispose(); > }
ちなみに C#6 以降のバージョンでは、上記を Pb.Image?.Dispose(); と一行で書けます。
> private void BtnTile_Click(object sender, EventArgs e) > { > if (bmp.Width < 60 || bmp.Width > 120) { return; } > if (bmp.Height < 60 || bmp.Height > 120) { return; }
ガード句として if (bmp == null) { return; } も追加しておくことをお奨めします。
BtnFileOpen が押される前に BtnTile が押された場合、 NullReferenceException になってしまうと思うので。
> Graphics g = Graphics.FromImage(backbmp); ここは using (Graphics g = Graphics.FromImage(backbmp)) を使った方が良いですね。 Bitmap と違って、他の場所で利用されているものでは無いため、 その場で処分してしまって構いません。
> Pb.Invalidate(); この行はあっても無くても同じかな。
|
|