2012-01-20 1 views
0

Я уверен, что есть ответы там ... но googling на «C# using» немного сложнее, чем вы можете ожидать.Есть ли недостатки в использовании «использования» для всех не примитивных объектов?

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

Это довольно точное утверждение или есть некоторые недостатки (за пределами немного более загроможденного кода) для использования «использования» почти для всего?

+3

Можете ли вы привести пример, как вы используете «использование»? – DaveShaw

+1

'using' работает только для объектов, которые реализуют' IDisposable'. Попробуйте выполнить поиск 'когда использовать IDisposable', и вы найдете ответ. –

+0

Операция 'using' C# работает только с классами, которые реализуют' IDisposable'. Все, что он делает, это вызов реализации 'Dispose()' объекта в конце блока. –

ответ

2

Как уже упоминалось, вы можете использовать оператор using для типов, которые реализуют IDisposable. Для типов, которые реализуют IDisposable, единственный реальный недостаток, который я видел, связан с тем, что using вызывает метод типа Dispose() типа неявно, поэтому, если в этом вызове выбрано исключение, его иногда трудно поймать.

В противном случае я рекомендовал бы using для типов, которые реализуют IDisposable вместо использования try-catch-finally, поскольку он делает код более компактным и чистым.

Редактировать: нашел хорошее msdn article, объяснив это и другие подводные камни.

+0

Тот факт, что он вообще не будет компилироваться по типам, неприменим, может считаться недостатком ... –

+0

да, конечно. отредактировал мой ответ для уточнения. –

5

Это не ясно, что вы имеете в виду - если вы имеете в виду, используя такие утверждения, как:

using (SomeType x = new SomeType()) 
{ 
} 

Тогда это только применимо к IDisposable реализации.

Если вы имеете в виду, используя директивы так:

using System.IO; 

тогда да, я обычно есть директива для каждого пространства имен, содержащего тип I хочет использовать в пределах конкретного исходного файла.

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