Что происходит с элементами управления, созданными в методе после его завершения? - PullRequest
1 голос
/ 28 января 2010

например в этом коде:

void ButtonCreator()
{
    Button elboton = new Button();
}

что происходит с elboton после вызова этого метода?

Ответы [ 4 ]

5 голосов
/ 28 января 2010

Если на них не ссылается какой-либо другой объект (например, контейнер), то они становятся недоступными и могут быть собраны сборщиком мусора. Это то же самое, что и создание любого другого объекта.

Обратите внимание, что класс System.Windows.Forms.Control (и его подклассы, такие как Button) все реализуют интерфейс IDisposable, поэтому самый простой способ убедиться, что любые неуправляемые ресурсы *1007*, связанные с Button, выпущено использование блока using, например:

using(Button elboton = new Button()) {
    // Do whatever you need to do
}
// elboton is now disposed

Однако любые управляемые ресурсы, связанные с объектом, не будут возвращены, пока GC не запустится, независимо от того, используется ли блок using.

0 голосов
/ 28 января 2010

В вашем примере elboton будет собираться GC (сборщиком мусора) при запуске следующей итерации GC. Это связано с тем, что на него не ссылаются сразу после завершения ButtonCreator ().

0 голосов
/ 28 января 2010

Ссылка на этот экземпляр не будет, и через некоторое время он будет очищен GC ...

0 голосов
/ 28 января 2010

Все ссылки на него уничтожены, и, в свою очередь, сборщик мусора в конечном итоге поглотит его. Если вы назначите эту кнопку для существования в каком-то другом контексте (добавьте ссылку на нее, которая действует за пределами этого метода), она останется.

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