Chiarimento sul metodo di smaltimento

2

Se avvolgo in una classe un oggetto che ha il metodo dispose, dovrò implementare anche il metodo di smaltimento nella classe?

Ad esempio, ho una classe che include un'istanza di SQLiteConnection , dovrei aver bisogno di implementare il metodo dispose per chiamare SQLiteConnection one?

    
posta arabum97 13.12.2015 - 00:06
fonte

2 risposte

4

For example I have a class which wraps an instance of SQLiteConnection, should I need to implement the dispose method to call the SQLiteConnection one?

Sì.

Se hai MySQLiteConnection che rende / apre un SQLiteConnection , questo non verrà automaticamente eliminato nella raccolta dati obsoleti. Devi contrassegnare esplicitamente il tuo wrapper come IDisposable e chiamare il membro SQLiteConnection::Dispose .

Se stai solo usando il SQLiteConnection nella classe, o se hai un riferimento a uno (ma non aprilo / non lo possiedi), la risposta di Robert Harvey è corretta - solo usalo come faresti altrove.

    
risposta data 13.12.2015 - 00:28
fonte
4

I have a class which wraps an instance of SQLiteConnection, should I need to implement the dispose method to call the SQLiteConnection one?

No. Basta avvolgere la tua istanza SQLiteConnection in un'istruzione using .

using (connection = new SQLiteConnection())
{
    // use 'connection' here
    // ...
} // 'connection' is disposed here.

Poiché SQLiteConnection implementa IDisposable , l'oggetto connection è sistemato automaticamente quando il blocco using esce dall'ambito (alla parentesi finale dell'istruzione using ).

Se erediti da SQLiteConnection , eredita anche da IDisposable e implementa il metodo Dispose() , che eseguirà qualsiasi pulizia locale necessaria nella classe discendente e quindi chiamerà Dispose() sul genitore SQLiteConnection class.

Ulteriori letture
Uso dell'istruzione (riferimento C #)

    
risposta data 13.12.2015 - 00:12
fonte

Leggi altre domande sui tag