Поделиться через


Использование объектов, инкапсулирующих ресурсы

Обновлен: Ноябрь 2007

При написании программного кода, в котором используется объект, инкапсулирующий ресурс, по завершении использования объекта должен гарантировано вызываться его метод Dispose. Это можно выполнить с помощью инструкции C# using или реализацией блока try/finally на других языках, в которых может использоваться среда CLR.

Оператор C# using

Инструкция языка программирования C# using автоматизирует вызов метода Dispose, упрощая код создания и очистки объекта. Инструкция using получает один или больше ресурсов, выполняет заданные инструкции и затем освобождает объект. Следует отметить, что инструкция using полезна только для объектов с периодом существования, не выходящим за пределы метода, в котором создаются данные объекты. В следующем фрагменте кода создается и очищается экземпляр класса ResourceWrapper, иллюстрируемого в примере из раздела реализация метода Dispose.

class myApp
{
   public static void Main()
   {
      using (ResourceWrapper r1 = new ResourceWrapper())
      {
         // Do something with the object.
         r1.DoSomething();
      }
   }
}

Этот код, включающий инструкцию using, равнозначен следующему.

class myApp
{
   public static void Main()
   {
      ResourceWrapper r1 = new ResourceWrapper();
      try
      {
         // Do something with the object.
         r1.DoSomething();
      }
      finally
      {
         // Check for a null resource.
         if (r1 != null)
         // Call the object's Dispose method.
         r1.Dispose();
      }
   }
}

Инструкция C# using позволяет присоединять в одной инструкции несколько ресурсов, что внутренне эквивалентно вложенным инструкциям using. Дополнительные сведения и примеры исходного кода см. в разделе Оператор using (Справочник по C#).

Блок Try/Finally

Блок try/finally следует использовать, чтобы гарантировать вызов метода Dispose объекта при написании на языках, отличных от C#, управляемого программного кода, в котором используется объект, инкапсулирующий ресурс. В следующем фрагменте кода создается и освобождается экземпляр класса Resource, иллюстрируемого в примере из раздела Реализация метода Dispose.

class myApp
   Public Shared Sub Main()
      Resource r1 = new Resource()
      Try
         ' Do something with the object.
         r1.DoSomething()
      Finally
         ' Check for a null resource.
         If Not (r1 is Nothing) Then
            ' Call the object's Dispose method.
            r1.Dispose()
         End If
      End Try
   End Sub
End Class

См. также

Ссылки

Оператор using (Справочник по C#)

Другие ресурсы

Очистка неуправляемых ресурсов