interface IMyInterace
{
void Open();
object Read();
void Close();
}
class MyImplementation : IMyInterface
{
public void Open() { /* instantiates disposible class */ }
//...
public void Close() { /* calls .Dispose(); */ }
}
C'è un buon modo per gestire questo tipo di situazione per garantire che vengano chiamate le istanze disposte all'interno della classe? (Non v'è alcun segnale per i chiamanti che devono chiamare 'Chiudi' tranne nella documentazione.) Le implementazioni di IMyInterface non necessariamente incapsulano le istanze IDisposible e vengono chiusi e riaperti più volte per tutta la vita dell'applicazione.Come affrontare con una classe che incapsula un'istanza disposible?
Sto pensando di fare questo:
- Implementare IDisposible in MyImplementation.
- Set Dispose() per chiamare Close().
- Aggiungere una chiamata a Close() o Dispose() all'opzione di Open per garantire che la precedente chiamata sia stata chiusa.
Gli utenti di IMyInterface non sanno cosa implementazione che stanno utilizzando, quindi non sono sicuro di quanto valore rendendo MyImplementation disposible ha, e ancora una volta, non tutte le implementazioni incapsulare IDisposibles.
Non è necessario il modello usa e getta pieno.Non c'è bisogno di un distruttore e quindi non di SuppressFinalize. –