Создание нового объекта, а затем перераспределение - PullRequest
0 голосов
/ 09 февраля 2011

Вопрос, основанный на «Новому» или не «новому»

Foo object1 = new Foo();
// some operations later ...
object1 = new Foo();

Желательно ли то, что я пытаюсь сделать? и если Foo реализует Idispoable, нужно ли вызывать dispose перед повторным вызовом нового оператора?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Да, то, что вы делаете в примере, прекрасно.

Переменная object1 - это просто ссылка на объект типа Foo.После первого присваивания new это относится к одному конкретному экземпляру Foo;после второго new присваивания он ссылается на совершенно другой экземпляр (и исходный экземпляр становится пригодным для сборки мусора, при условии, что на него больше ничего не ссылается).

И да, если Foo реализует IDisposable тогда вы должны утилизировать его, предпочтительно с помощью блока using, хотя я лично предпочитаю использовать отдельные using переменные для каждого блока:

using (Foo first = new Foo())
{
    // do something
}

using (Foo second = new Foo())
{
    // do something else
}
1 голос
/ 09 февраля 2011

В общем случае, если класс реализует IDisposable, рекомендуется убедиться, что вызывается Dispose().Это почти всегда правильно.

...