Visual Basic .NET Language
Одноразовые объекты
Поиск…
Основная концепция IDisposable
Каждый раз, когда вы создаете экземпляр класса, который реализует IDisposable
, вы должны позвонить. .Dispose
1 в этом классе, когда вы закончите использовать его. Это позволяет классу очищать любые управляемые или неуправляемые зависимости, которые он может использовать. Не делать этого может привести к утечке памяти.
Ключевое слово Using
гарантирует, что .Dispose
, без необходимости явно его вызывать.
Например без Using
:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
Теперь с Using
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
Одно из основных преимуществ Using
- это когда генерируется исключение, потому что оно обеспечивает .Dispose
вызывается.
Рассмотрим следующее. Если выбрано исключение, вам нужно не забудьте вызвать. Задайте, но вы также можете проверить состояние объекта, чтобы убедиться, что вы не получили нулевую ошибку ссылки и т. Д.
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
Catch ex As Exception
'Handle the Exception
Finally
If sr IsNot Nothing Then sr.Dispose()
End Try
Использование блока означает, что вам не нужно помнить об этом, и вы можете объявить свой объект внутри try
:
Try
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using
Catch ex As Exception
'sr is disposed at this point
End Try
1 Всегда ли мне нужно вызывать Dispose () для объектов DbContext? Нету
Объявление большего количества объектов в одном
Иногда вам нужно создать два Disposable
объекта подряд. Существует простой способ избежать вложенности Using
блоков.
Этот код
Using File As New FileStream("MyFile", FileMode.Append)
Using Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
End Using
можно укоротить в эту. Главное преимущество заключается в том, что вы получаете один уровень отступов:
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using