C# 数据表内部使用?

C# 数据表内部使用?,c#,datatable,dispose,C#,Datatable,Dispose,我已经在使用块内部声明了datatable,该块在作用域的末尾调用Dispose方法 using (DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems()) { ... } 但在reflector中,datatable似乎没有Dispose功能 这是怎么回事?为什么要处理数据表?如果确实希望发生这种情况,则应将其从其数据集中删除。System

我已经在使用块内部声明了datatable,该块在作用域的末尾调用Dispose方法

 using (DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems())
            {
                 ...
            }
但在reflector中,datatable似乎没有
Dispose
功能


这是怎么回事?

为什么要处理数据表?如果确实希望发生这种情况,则应将其从其数据集中删除。

System.Data.DataTable扩展了
System.ComponentModel.MarshallByValueComponent
,MarshallByValueComponent实现了
IDisposable


Reflector不会显示基类型的方法,除非它们在派生类型中被重写。

DataTable
继承自实现
IDisposable
接口的
MarshallByValueComponent
类(见下文),C允许为派生类的实例调用基类公共方法

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:

顺便说一句,请查看此反射器显示的方法。您可以切换“继承的成员”(Ctrl+I)以显示或隐藏方法。Reflector>工具>选项>浏览器>选中“显示继承的成员”。@AMissico不知道这一点。谢谢但它只在左边的树上显示,而不是在右边的反汇编程序中显示。@RoyiNamir;对。它这样做是因为类没有实现。如果您在树窗格中“钻取”,它将带您到继承类的反汇编代码。您可以切换“继承的成员”(Ctrl+I)以显示或隐藏方法。