Использование объектов, инкапсулирующих ресурсы
При написании программного кода, в котором используется объект, инкапсулирующий ресурс, по завершении использования объекта должен гарантировано вызываться его метод 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#)