Следует ли избавляться от UdpClient?

При попытке избавиться от UdpClient я обнаружил, что это невозможно. Для следующего:

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

Visual Studio показывает ошибку:

'System.Net.Sockets.UdpClient.Dispose (bool)' недоступен из-за его уровня защиты

Означает ли это, что я должен унаследовать от UdpClient и раскрыть Dispose (поскольку, похоже, консенсус заключается в том, что все, что реализует IDisposable, следует удалить)? Есть ли причина, по которой мы не должны использовать класс напрямую? Или просто не от чего избавляться после звонка Close?

Хотя инструкция using работает, она не подходит для прослушивания.


person ispiro    schedule 19.06.2014    source источник
comment
Если бы вы должны были наследовать от него, конструкторы тоже были бы защищены, но они общедоступны. Документация определенно вводит в заблуждение.   -  person ClickRick    schedule 19.06.2014
comment
protected virtual void UdpClient.Dispose(Boolean) существует с .NET framework 2.0, тогда как перегрузка без параметров public void Dispose() доступна только с 4.6. Ваш проект нацелен на framework ‹4.6, поэтому вы видите только защищенный метод   -  person twj    schedule 21.06.2017


Ответы (1)


Нет, не надо. тебе следует позвонить UdpClient.Close ...


Посмотрев на источник здесь: http://referencesource.microsoft.com/#System/net/System/Net/Sockets/UDPClient.cs#7682e0ea2c48b5cb.

Похоже, вы можете вызвать Close или ((IDisposable)updClient).Dispose, но с точки зрения API я думаю, что вызов Close - это способ использования клиента UDP ...

Для меня все это не имеет смысла ....

person AK_    schedule 19.06.2014
comment
Поскольку, похоже, консенсус в том, что все орудия IDisposable следует утилизировать. У вас есть источник? - person ispiro; 19.06.2014
comment
Этот API поддерживает инфраструктуру .NET Framework и не предназначен для использования непосредственно из вашего кода. msdn.microsoft.com/en-us/library/bb360027.aspx - person AK_; 19.06.2014
comment
@ispiro - это недостаток дизайна из .Net 1.1. - person AK_; 19.06.2014
comment
+1 Спасибо. Это довольно ясный источник! Хотя, признаюсь, я сейчас не понимаю всего этого UdpClient.IDisposable.Dispose, и почему не в документации для UdpClient.Dispose упоминается это. Возможно, здесь есть два разных Dispose метода ... В любом случае - спасибо за ответ. - person ispiro; 19.06.2014
comment
@ispiro просматривает источник I не понимаю. 'UdpClient.Close' идентичен 'UdpClient.IDisposable.Dispose' - person AK_; 19.06.2014