【发布时间】:2010-07-22 06:19:28
【问题描述】:
我想知道是否有任何关于处理嵌套在另一个一次性物品中的一次性物品的约定(在财产/公共领域,而不是作为私人成员)。例如,DataSet 包含 DataTable(s),SqlCommand 包含 SqlConnection。
很明显,一个类会处理掉它拥有的所有 Disposable 物品,并留下其余的。是否存在这样的约定?如果是,.NET 库如何确定谁拥有什么?如何确定嵌套对象是否正在被释放?
PS:我一直在想这个问题,显然其他人也是如此:What gets disposed when SqlCommand.Dispose is called?
编辑1:发现处理DataSet,不处理它的表。
// Fill dataset from sqldataadpater.
foreach (DataTable dt in dataSet.Tables)
{
dt.Disposed += Program.DisposedEventHandler2;
}
Console.WriteLine("Disposing dataset");
dataSet.Dispose(); //Event not fired here.
Console.WriteLine("Disposing datatables maually");
foreach (DataTable dt in dataSet.Tables)
{
dt.Dispose(); //Event fired here
}
#endregion
【问题讨论】:
标签: c# .net dispose idisposable