2011-11-29 14 views
6

Ho dichiarato datatable all'interno utilizzando il blocco che chiama il metodo Dispose alla fine dell'ambito.Datatable inside using?

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

Ma nel riflettore, doesnt DataTable seens avere Dispose funzione

enter image description here

Come è che?

+1

By A proposito, guarda questo

+0

Reflector mostra i metodi. È possibile attivare "Membri ereditati" (Ctrl + I) per mostrare o nascondere i metodi. – AMissico

+2

Riflettore> Strumenti> Opzioni> Browser> Seleziona "Mostra membri ereditati". – AMissico

risposta

3

System.Data.DataTable estende System.ComponentModel.MarshalByValueComponent e, MarshalByValueComponent implementa IDisposable.

riflettore non visualizzare i metodi del tipo di base meno che non siano sovrascritti nel tipo derivato.

+0

+1 da quando sei stato il primo a fare la presa giusta! – sll

+0

Reflector mostra i metodi. È possibile attivare "Membri ereditati" (Ctrl + I) per mostrare o nascondere i metodi. – AMissico

-1

Perché stai cercando di eliminare DataTable? Dovresti eliminarlo dal suo DataSet se vuoi davvero che questo accada.

+0

-1; DataTable è indipendente da un DataSet. – AMissico

3

DataTable ereditato dalla classe MarshalByValueComponent che implementa l'interfaccia IDisposable (vedere di seguito), C# consente di chiamare i metodi pubblici della classe di base per le istanze di classi derivate.

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

public class MarshalByValueComponent : 
    IComponent, IDisposable, IServiceProvider 

blocco di codice sarebbe rappresentato sotto il cofano come mostrato di seguito, quindi garantisce che Dispose() metodo verrà chiamato:

{ 
    DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems() 

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

Vedere MSDN per ulteriori dettagli: using Statement

+1

Conosco l'istruzione using ..... p..s grazie. per la risposta +1. –