Будет ли неявная переменная в предложении using собирать мусор? - PullRequest
3 голосов
/ 28 марта 2011

В следующем коде содержит ли базовый код жесткую ссылку на экземпляр безымянной переменной типа Foo или элемент уязвим для сборки мусора?

using(new Foo())
{
    // Something done here.
}

Собранный элемент является просто семафоромТип объекта, который выполняет подсчет ссылок на ресурсы, поэтому на него не ссылаются в блоке кода.

Ответы [ 2 ]

10 голосов
/ 28 марта 2011

Предложение using создает скрытую локальную переменную, содержащую объект (эта переменная используется сгенерированным предложением finally).

Эта переменная предотвращает GC'd объекта.

Вы можете увидеть эту переменную в спецификации .

3 голосов
/ 28 марта 2011
using(new Foo())

этот анонимный экземпляр Foo выйдет из области действия после блока using и может быть затем подвергнут сборке мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...