私は処分に必要なリソースを持つクラスを持っている:リスト内のオブジェクトを自動的に処理する方法は?
class Desert: IDisposable
{
private object resource; // handle to a resource
public Desert(string n)
{
// Create resource here
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (resource != null) resource.Dispose();
}
}
}
Listオブジェクトが破壊されようとしているたびに自動的に、各要素に対して処分を呼び出すためのフレームワークを依頼するどのような方法があるかどうか、私は疑問に思う、ただ私はデストラクタを持つように。現在、リスト内をループしてDisposeを呼び出しています。
// On form open
List<Desert> desertList = new List<Desert>();
for(int i = 0; i < 10; i++)
{
desertList.Add(new Desert("Desert" + i));
}
// On form closing
for (int i = 0; i < 10; i++)
{
desertList[i].Dispose();
}
List内にオブジェクトを配置する唯一の方法はありますか?あなたはそれ以上が必要な場合は、ファイナライザを見ることができ
public class AutoDisposeList<T> : List<T>, IDisposable where T : IDisposable
{
public void Dispose()
{
foreach (var obj in this)
{
obj.Dispose();
}
}
}
using (var myList = new AutoDisposeList<Desert>())
{
}
:
各オブジェクトのファイナライザで行うことができます。私はそれが同じではないことを知っているが、私は他の "オートマトン"を知らない。少なくともあなたは自分自身を処分する必要はない。 –
@TobiasTheelファイナライザの管理対象オブジェクトにアクセスすることは適切ではないので、あなたが示唆していることは適切ではありません。 – Servy