2015-07-10 5 views
-5

Что происходит, когда я вызываю один и тот же метод дважды и в нем он создает экземпляр одного и того же объекта. Предположим:Что происходит, когда я вызываю тот же метод дважды

void doSomethingMethod() 
{ 
myClass Object1 = new myClass(); 
... 
} 

Main() 
{ 
doSomethingMethod(); //<-- first call to the method 
. 
. 
. 
doSomethingMethod(); //<-- second call to the method 
} 

Что происходит с объектом класса, когда я вызываю этот метод во второй раз? Является ли он заменен новым объектом? Будут ли скопированы свойства в существующем объекте на новый объект?

+2

Ваш вопрос не имеет большого смысла. Ваша переменная 'class' (незаконный C#, так как это зарезервированное слово) относится к новому объекту с каждым вызовом метода. Скорее всего, к тому времени, когда вы перейдете ко второму вызову метода, это будет долгое время, но в любом случае он не будет доступен никаким кодом после этого времени, если вы не назначите ссылку на более постоянную переменную. Как он будет _replaced_, если никто не сможет получить к нему доступ вообще? Вы даже попробовали отладить интересующий вас сценарий? –

+0

Как вы получили код, работающий с присвоением переменной переменной «класс». Вместо этого вам нужно использовать «@class». И если вы хотите заменить объект «@class» во втором экземпляре, сделайте объявление global (поместите «класс myClass» в глобальную область.). В вашем случае он будет доступен только в doSomethingMethod, и после того, как элемент управления выйдет из этого метода, ссылка на переменную памяти @class будет использоваться только сборщиком мусора. – ATP

ответ

3

Поскольку myClass class переменной локальной в doSomethingMethod, он выходит из области видимости, как только doSomethingMethod заканчивает свою работу. На этом этапе экземпляр myClass, присвоенный переменной, становится пригодным для сбора мусора, если вы не сохранили ссылку в какой-либо другой переменной или коллекции.

Такая же последовательность происходит каждый раз, независимо от того, сколько раз вы вызываете метод: в начале создается новый экземпляр myClass, а затем он становится пригодным для сбора мусора в конце метода.

Смежные вопросы