У вас нет. Заявление using
делает это за вас.
Согласно MSDN, этот пример кода:
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
расширяется, при компиляции, в следующем коде (обратите внимание на дополнительные фигурные скобки, чтобы создать ограниченную область применения для объекта):
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
Примечание: Как @timvw mentioned, если вы цепляете методы или используете инициализаторы объектов в самой инструкции using и генерируете исключение, объект не будет удален. Это имеет смысл, если вы посмотрите, к чему он будет расширен. Например:
using(var cat = new Cat().AsDog())
{
// Pretend a cat is a dog
}
расширяется
{
var cat = new Cat().AsDog(); // Throws
try
{
// Never reached
}
finally
{
if (cat != null)
((IDisposable)cat).Dispose();
}
}
AsDog
будет, очевидно, бросить исключение, так как кошка никогда не может быть столь же удивительным, как собака. Кошка никогда не будет удалена. Конечно, некоторые люди могут утверждать, что кошек никогда не нужно удалять, но это еще одна дискуссия ...
В любом случае, просто убедитесь, что то, что вы делаете using(here)
, безопасно, и вы готовы к работе. (Очевидно, что если конструктор не работает, объект не будет создан для начала, поэтому не нужно распоряжаться).
Мне нравятся такие, казалось бы, простые вопросы о StackOverflow. Я всегда удивляюсь, сколько информации вы можете получить из такого вопроса. Я не знал о проблеме инициализаторов объектов ... –
SO - это, безусловно, удивительный веб-сайт. Мне нравится здесь. –