2011-11-29 17 views
6

He declarado tabla de datos dentro utilizando bloque que llama al método Dispose al final del alcance.Datatable dentro de usar?

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

Pero en el reflector, no logra tabla de datos seens tener Dispose función

enter image description here

¿Cómo es eso?

+1

Por De la manera, mira esto

+0

Reflector muestra los métodos. Puede alternar entre "Miembros heredados" (Ctrl + I) para mostrar u ocultar los métodos. – AMissico

+2

Reflector> Herramientas> Opciones> Navegador> Marque "Mostrar miembros heredados". – AMissico

Respuesta

3

System.Data.DataTable extiende System.ComponentModel.MarshalByValueComponent y, MarshalByValueComponent implementa IDisposable.

Reflector no mostraría los métodos del tipo base a menos que se hayan reemplazado en el tipo derivado.

+0

+1 ¡ya que fuiste el primero en atrapar correctamente! – sll

+0

Reflector muestra los métodos. Puede alternar entre "Miembros heredados" (Ctrl + I) para mostrar u ocultar los métodos. – AMissico

-1

¿Por qué está tratando de deshacerse de la DataTable? Debes eliminarlo de su DataSet si realmente quieres que esto suceda.

+0

-1; DataTable es independiente de un DataSet. – AMissico

3

DataTable heredado de MarshalByValueComponent clase que implementa la interfaz IDisposable (ver a continuación), C# permite llamar a los métodos públicos de la clase base para las instancias de clases derivadas.

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

public class MarshalByValueComponent : 
    IComponent, IDisposable, IServiceProvider 

Su bloque de código estaría representada bajo el capó, como se muestra a continuación, lo que garantiza que Dispose() método será llamado:

{ 
    DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems() 

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

Ver MSDN para más detalles: using Statement

+1

Sé la declaración de uso ..... p..s gracias. para el answe +1. –