2014-06-19 10 views
5

Beim Versuch, einen UdpClient zu entsorgen, habe ich festgestellt, dass es unmöglich ist. Für das folgende:Sollte ein UdpClient entsorgt werden?

UdpClient udpClient = new UdpClient(); 
udpClient.Dispose(); 

Visual Studio zeigt einen Fehler:

'System.Net.Sockets.UdpClient.Dispose(bool)' is inaccessible due to its protection level

Dies bedeutet, dass ich von UdpClient und entlarvt die Dispose erben sollte (da es scheint der Konsens, dass whatever implements IDisposable should be disposed of zu sein)? Gibt es einen Grund, warum wir die Klasse nicht direkt benutzen sollten? Oder gibt es einfach nach dem Anruf Close nichts zu entsorgen?

Obwohl eine using Anweisung funktioniert funktioniert - es ist nicht geeignet, wenn Sie zuhören.

+0

Wenn Sie von ihm erben soll, die construc Die Menschen würden auch geschützt, aber sie sind öffentlich. [Die Dokumentation] (http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.dispose.aspx) ist definitiv irreführend. – ClickRick

+0

@ ClickRick Danke. – ispiro

+0

'geschützter virtueller void UdpClient.Dispose (Boolean)' gibt es seit .NET Framework 2.0, während die parameterlose Überladung 'public void Dispose()' erst seit 4.6 verfügbar ist. Ihr Projekt zielt auf das Framework <4.6, so dass Sie nur die geschützte Methode – twj

Antwort

7

Nein, sollten Sie nicht. Sie sollten UdpClient.Close nennen ...


Nachdem hier an der Quelle suchen: http://referencesource.microsoft.com/#System/net/System/Net/Sockets/UDPClient.cs#7682e0ea2c48b5cb

Es scheint, Sie entweder Close oder ((IDisposable)updClient).Dispose nennen kann aber API-weise denke ich Close Aufruf ist der Weg UDP-Client verwendet werden soll ...

All dies mir sehr wenig Sinn macht ....

+0

sehen. Es scheint der Konsens zu sein, dass [was auch immer IDisposable implementiert, entsorgt werden sollte] (http://stackoverflow.com/questions/2926869/do-you-need -zu-disponieren-von-Objekten-und-setzen-sie-zu-null- Haben Sie eine Quelle? – ispiro

+0

Diese API unterstützt die .NET Framework-Infrastruktur und ist nicht für die direkte Verwendung in Ihrem Code vorgesehen. http://msdn.microsoft.com/en-us/library/bb360027.aspx –

+0

@ispiro es ist im Grunde ein Designfehler von. NET 1.1 –