Рассмотрим следующий код:
// module level declaration
Socket _client;
void ProcessSocket() {
_client = GetSocketFromSomewhere();
using (_client) {
DoStuff(); // receive and send data
Close();
}
}
void Close() {
_client.Close();
_client = null;
}
Учитывая, что код вызывает метод Close()
, который закрывает сокет _client
и устанавливает его на null
, но все же внутри блока `using ', что именно происходит за кулисами? Действительно ли розетка закрыта? Есть ли побочные эффекты?
P.S. Это использует С# 3.0 в .NET MicroFramework, но я полагаю, что С#, язык, должен функционировать одинаково. Причина, по которой я спрашиваю, заключается в том, что иногда, очень редко, у меня заканчиваются сокеты (что очень ценный ресурс на устройствах .NET MF).