我想知道是否有關於處置一次性物品(處於財產/公共領域而不是私人成員)的一次性物品的處置方面的任何公約。例如,一個DataSet包含DataTable,一個SqlCommand包含一個SqlConnection。處理嵌套一次性物品?
顯而易見的情況是,一個班級會處理它擁有的所有一次性物品,剩下的部分將會丟棄。是否存在這樣的約定?如果是這樣,.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
有時候它很煩人,這意味着你可以使用'新的StreamReader(新的FileStream(...))'而不必擔心有兩個'使用'語句......通常可以提高可讀性,國際海事組織。 – 2010-07-22 06:36:24
@Jon:我明白爲什麼BCL團隊選擇這個API設計。它指導.NET開發人員「成功的基石」(就像Rico Mariani所說的那樣)。但是,我錯過了重載的枚舉或布爾標誌,命令'StreamReader'使流保持活着。在當前的設計中,使流保持活動狀態意味着您將不得不使用'class DoNotDisposeStreamDecorator:Stream'封裝流。 – Steven 2010-07-22 06:46:34
是的,我自己就有這樣一個裝飾器... – 2010-07-22 07:21:49