Datatable внутри использования? - PullRequest
6 голосов
/ 29 ноября 2011

Я объявил datatable внутри, используя блок, который вызывает метод Dispose в конце области.

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

Но в рефлекторе, datatable не видит Dispose функцию

enter image description here

Как это?

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

System.Data.DataTable extends System.ComponentModel.MarshalByValueComponent, а MarshalByValueComponent реализует IDisposable.

. Отражатель не будет отображать методы базового типа, если они не переопределены в производном типе.

3 голосов
/ 29 ноября 2011

DataTable унаследовано от класса MarshalByValueComponent, который реализует интерфейс IDisposable (см. Ниже), 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 для получения более подробной информации: using Statement

0 голосов
/ 29 ноября 2011

Почему вы пытаетесь избавиться от DataTable? Вы должны удалить его из набора данных, если вы действительно хотите, чтобы это произошло.

...