Proprio come dice il titolo:Come può TcpClient implementare IDisposable e non disporre di un metodo Dispose pubblico?
Come può TcpClient implementare IDisposable e non disporre di un metodo Dispose pubblico?
Proprio come dice il titolo:Come può TcpClient implementare IDisposable e non disporre di un metodo Dispose pubblico?
Come può TcpClient implementare IDisposable e non disporre di un metodo Dispose pubblico?
utilizzando explicit interface implementation. Invece di
public void Dispose()
{
...
}
avrebbe
void IDisposable.Dispose()
{
...
}
vari altri tipi fanno; a volte è fuori necessità (ad esempio supportando IEnumerable.GetEnumerator
e IEnumerable<T>.GetEnumerator
) e altre volte è necessario esporre un'API più appropriata quando il tipo concreto è noto.
Allora, in questo caso, qual è il modo consigliato di smaltirlo correttamente? Chiamando il metodo Dispose() rilasciandolo esplicitamente su IDisposable o chiamando TcpClient.Close()? – KFL
@ KFL: puoi semplicemente usare una istruzione 'using' - normalmente è l'opzione migliore. Se non puoi usare un'istruzione 'using', chiamare' Close' va bene. –
Vedere explicit interface implementation
. È necessario eseguire il cast esplicito dell'istanza di TcpClient
su IDisposable
o di inserirlo in un blocco using() {...}
. Si noti che le classi che implementano IDisposable
esplicitamente forniscono un metodo pubblico Close()
invece
Quando guido intellisense per avere un'idea di un'interfaccia non familiare (probabilmente cattiva, lo so), questa è una delle mie frustrazioni personali perché c'è poca indicazione che una dichiarazione usando sarebbe appropriata. – spender
Parlando di 'using', non ho mai incontrato una variabile usa e getta nella mia vita. Tutti i miei articoli usa e getta sono membri. Quindi sono perplesso da tutta la rabbia dell'uso. – CannibalSmith
@CannibalSmith: 'using' è un _replacement_ per tenerli come membri, per cose che sono veramente rilevanti solo nell'area' using'. Uno dei suoi usi è l'apertura di un database o una connessione di rete, l'esecuzione delle operazioni da eseguire e la chiusura automatica. – Nyerguds