Tak jak mówi tytuł:W jaki sposób TcpClient może implementować IDisposable i nie mieć publicznej metody Dispose?
W jaki sposób TcpClient może implementować IDisposable i nie mieć publicznej metody Dispose?
Tak jak mówi tytuł:W jaki sposób TcpClient może implementować IDisposable i nie mieć publicznej metody Dispose?
W jaki sposób TcpClient może implementować IDisposable i nie mieć publicznej metody Dispose?
Za pomocą explicit interface implementation. Zamiast
public void Dispose()
{
...
}
musiałby
void IDisposable.Dispose()
{
...
}
Różne inne typy to zrobić; czasami jest to konieczne (na przykład obsługa IEnumerable.GetEnumerator
i IEnumerable<T>.GetEnumerator
), a innym razem ma na celu odsłonięcie bardziej odpowiedniego API, gdy znany jest typ betonu.
W takim razie, jaki jest zalecany sposób prawidłowego pozbycia się go? Wzywając metodę Dispose(), jawnie przesyłając ją do IDisposable lub wywołując TcpClient.Close()? – KFL
@KFL: Możesz po prostu użyć instrukcji 'using' - to zwykle najlepsza opcja. Jeśli nie możesz użyć instrukcji 'using', wywołanie' Close' jest w porządku. –
Zobacz explicit interface implementation
. Musisz jawnie rzucić instancję TcpClient
na IDisposable
lub owinąć ją w blok using() {...}
. Zauważ, że klasy, które implementują IDisposable
wyraźnie często zapewniają publiczną metodę Close()
zamiast
Kiedy jadę intellisense, aby czuć się na nieznanym interfejsu (prawdopodobnie zły, wiem), jest to jeden z moich frustracji domowych, ponieważ niewiele jest wskazanie że stosowne oświadczenie byłoby właściwe. – spender
Mówiąc o 'użyciu', nigdy w życiu nie spotkałem lokalnej zmiennej jednorazowej. Wszystkie moje materiały jednorazowe są członkami. Więc jestem zaintrygowany przez wszystkie "wściekłe" użycie. – CannibalSmith
@CannibalSmith: 'using' to _replacement_ dla zachowania ich jako członków, dla rzeczy, które są naprawdę istotne tylko w obszarze' using'. Jednym z jego zastosowań jest otwieranie bazy danych lub połączenia sieciowego, wykonywanie operacji, które należy wykonać, a następnie automatyczne zamykanie. – Nyerguds