2011-11-29 26 views
6

我已經在範圍的末尾使用調用Dispose方法的塊聲明瞭datatable。Datatable裏面使用?

using (DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems()) 
      { 
       ... 
      } 

但在反射器,數據表犯規作用似乎有Dispose功能

enter image description here

這是怎麼回事?

+1

通過方式,看看這個

+0

反射器顯示的方法。您可以切換「繼承成員」(Ctrl + I)以顯示或隱藏方法。 – AMissico

+2

反射器>工具>選項>瀏覽器>選中「顯示繼承的成員」。 – AMissico

回答

3

System.Data.DataTable延伸System.ComponentModel.MarshalByValueComponent和MarshalByValueComponent實現IDisposable

反射器不會顯示基本類型的方法,除非它們在派生類型中被重寫。

+0

+1,因爲你是第一個做出正確的捕獲的人! – sll

+0

反射器顯示方法。您可以切換「繼承成員」(Ctrl + I)以顯示或隱藏方法。 – AMissico

-1

爲什麼你想要處理DataTable?如果你真的希望發生這種情況,你應該從它的DataSet中刪除它。

+0

-1; DataTable獨立於DataSet。 – AMissico

3

DataTable繼承自MarshalByValueComponent實現了IDisposable接口的類(見下文),C#允許爲派生類的實例調用基類public方法。

public class DataTable : MarshalByValueComponent, 
    IListSource, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable, IXmlSerializable 

public class MarshalByValueComponent : 
    IComponent, IDisposable, IServiceProvider 

您的代碼塊將罩下被表示爲如下所示,所以它保證Dispose()方法將被稱爲:

{ 
    DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems() 

    try 
    { 
    // .. code inside using statement 
    } 
    finally 
    { 
    if (dt != null) 
     ((IDisposable)dt).Dispose(); 
    } 
} 

見MSDN更多細節:using Statement

+1

我知道使用聲明..... p..s謝謝。爲answe +1。 –