Al igual que el título dice:¿Cómo puede TcpClient implementar IDisposable y no tener un método de eliminación pública?
¿Cómo puede TcpClient implementar IDisposable y no tener un método de eliminación pública?
Al igual que el título dice:¿Cómo puede TcpClient implementar IDisposable y no tener un método de eliminación pública?
¿Cómo puede TcpClient implementar IDisposable y no tener un método de eliminación pública?
Al usar explicit interface implementation. En lugar de
public void Dispose()
{
...
}
tendría
void IDisposable.Dispose()
{
...
}
Varios otros tipos hacen esto; a veces no es necesario (por ejemplo, es compatible con IEnumerable.GetEnumerator
y IEnumerable<T>.GetEnumerator
) y en otras ocasiones expone una API más adecuada cuando se conoce el tipo concreto.
Entonces, en este caso, ¿cuál es la forma recomendada de desecharlo adecuadamente? Llamando al método Dispose() explicándolo a IDisposable, o llamando a TcpClient.Close()? – KFL
@KFL: solo puede usar una instrucción 'using'; esa es normalmente la mejor opción. Si no puede usar una instrucción 'using', llamar' Close' está bien. –
Ver explicit interface implementation
. Debe emitir explícitamente la instancia de TcpClient
a IDisposable
, o envolverla en un bloque using() {...}
. Tenga en cuenta que las clases que implementan IDisposable
explícitamente a menudo proporcionan un método público Close()
en su lugar
Cuando estoy usando intellisense para familiarizarme con una interfaz desconocida (probablemente sea malo, lo sé), esta es una de las frustraciones de mi mascota porque hay pocas indicaciones que una declaración de uso sería apropiada. – spender
Hablando de 'using', nunca he encontrado una variable desechable local en mi vida. Todos mis desechables son miembros. Así que estoy desconcertado por toda la rabia 'usar'. – CannibalSmith
@CannibalSmith: 'using' es un _replacement_ para mantenerlos como miembros, para cosas que realmente solo son relevantes en el área' using'. Uno de sus usos es abrir una base de datos o una conexión de red, realizar las operaciones que necesita hacer y luego cerrarla automáticamente. – Nyerguds