2010-02-24 14 views
15

Başlığın da belirttiği gibi:TcpClient nasıl kullanılır ve bir Public Dispose yöntemine sahip olmaz?

TcpClient nasıl kullanılabilir ve nasıl bir Public Dispose yöntemi kullanamaz?

+1

Ben yabancı bir arayüzde (biliyorum, muhtemelen kötü) için bir fikir edinmesini intellisense sürüyorum, bu benim pet sıkıntılarınızı biridir kamu Close() yöntemi sağladığını unutmayın bir kullanım ifadesi uygun olurdu. – spender

+0

'using''dan bahsetmişken, hayatımda hiçbir zaman yerel atılabilir bir değişkenle karşılaşmadım. Bütün tek kullanımlarım üyeler. Bu yüzden tüm "kullanma" öfkeleriyle şaşırdım. – CannibalSmith

+0

@CannibalSmith: "using", gerçekten sadece "using" alanında ilgili olan şeyler için onları bir üye olarak tutmak için bir _replacement_. Kullanımlarından biri, bir veritabanı veya ağ bağlantısı açmak, yapmanız gereken işlemleri yapmak ve sonra otomatik olarak kapatmaktır. – Nyerguds

cevap

11

explicit interface implementation kullanarak. Bunun yerine

public void Dispose() 
{ 
    ... 
} 

arasında o

void IDisposable.Dispose() 
{ 
    ... 
} 

Çeşitli diğer türleri bunu olurdu; bazen gereklilikten yoksundur (örneğin, IEnumerable.GetEnumerator ve IEnumerable<T>.GetEnumerator'u desteklemektedir) ve diğer zamanlarda, beton tipi bilindiğinde daha uygun bir API ortaya çıkarmak içindir.

+0

Öyleyse, bu durumda uygun şekilde atmak için önerilen yol nedir? Dispose() yöntemini açık bir şekilde IDisposable'a veya TcpClient.Close() çağrısı yaparak çağırarak. – KFL

+1

@KFL: Sadece 'using' ifadesini kullanabilirsiniz - bu normalde en iyi seçenek. 'Using' ifadesini kullanamıyorsanız,' Close' işlevini çağırmak iyi olur. –

3

Bkz. explicit interface implementation. TcpClient örneğini IDisposable adresine açıkça dökmeniz veya bir using() {...} satırına sarmanız gerekir. küçük belirtiler var çünkü IDisposable uygulayan sınıflar açıkça sıklıkla yerine

İlgili konular