2014-06-19 16 views
5

Quando provo a smaltire un UdpClient, ho scoperto che è impossibile. Per il seguente:Dovrebbe essere smaltito un UdpClient?

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

Visual Studio mostra un errore:

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

questo significa che dovrei ereditare da UdpClient ed esporre la Dispose (Dal momento che sembra essere il consenso che whatever implements IDisposable should be disposed of)? C'è qualche ragione per cui non dovremmo usare la classe direttamente? O semplicemente non c'è niente da smaltire dopo aver chiamato Close?

Anche se una dichiarazione fa lavoro - non è adatto durante l'ascolto.

+0

Se si doveva ereditare da essa, la costru anche i tors sarebbero protetti, ma sono pubblici. [La documentazione] (http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.dispose.aspx) è decisamente fuorviante. – ClickRick

+0

@ClickRick Grazie. – ispiro

+0

'virtuale vuoto protetto UdpClient.Dispose (Boolean)' è in circolazione da .NET Framework 2.0 mentre il sovraccarico senza parametri 'public void Dispose()' è disponibile solo dal 4.6. Il tuo progetto ha come obiettivo il framework <4.6 in modo da vedere solo il metodo protetto – twj

risposta

7

No, non dovresti. si dovrebbe chiamare UdpClient.Close ...


Dopo guardando il sorgente qui: http://referencesource.microsoft.com/#System/net/System/Net/Sockets/UDPClient.cs#7682e0ea2c48b5cb

Sembra è possibile chiamare o Close((IDisposable)updClient).Dispose ma API-saggio penso chiamando Close è il modo client UDP è destinato ad essere utilizzato ...

Tutto questo rende molto poco senso per me ....

+0

Poiché sembra essere il consenso sul fatto che [qualsiasi strumento implementabile ID dovrebbe essere smaltito] (http://stackoverflow.com/questions/2926869/do-you-need -to-dispose-of-objects-and-set-them-to-null) - Hai una fonte? – ispiro

+0

Questa API supporta l'infrastruttura .NET Framework e non è progettata per essere utilizzata direttamente dal codice. http://msdn.microsoft.com/en-us/library/bb360027.aspx –

+0

@ispiro è fondamentalmente un difetto di progettazione da .Net 1.1 –

Problemi correlati