2011-02-09 5 views
0

вопрос, который строит на To "new" or not to "new"Создание нового объекта, то переразмещают

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

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

+1

Я надеюсь, что вы заметили в что ОП просто не понял синтаксис C#? Не делай того, что он сделал. –

ответ

3

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

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

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

+1

Я бы сказал это более решительно: «Если класс реализует IDisposable, вы ДОЛЖНЫ вызывать Dispose()« Предпочтительно, заверяйте в оператор using, где это возможно –

+0

@Mitch: экземпляры класса WCF. Нужно ли мне сказать больше? –

+0

как я сказал «везде, где это возможно» –

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