Хотя объект .Net обычно не вызывает Dispose для себя, бывают случаи, когда код, выполняющийся внутри объекта, может быть последним, кто ожидает его использования.В качестве простого примера, если метод Dispose может обрабатывать очистку частично созданного объекта, может быть полезно иметь конструктор, закодированный примерно так:
Sub New()
Dim OK As Boolean = False
Try
... do Stuff
OK = True
Finally
If Not OK Then Me.Dispose
End Try
End Sub
Если конструктор собирается выброситьисключение без возврата, тогда частично сконструированный объект, который должен быть оставлен, будет единственной вещью, которая когда-либо будет иметь информацию и стимул для проведения необходимой очистки.Если он не позаботится о своевременной утилизации, больше ничего не будет.
Что касается вашего конкретного фрагмента кода, шаблон несколько необычен, но выглядит как способ передачи сокета.из одного потока в другой.Есть вызов, который возвращает массив байтов и делает недействительным Socket;этот массив байтов может использоваться в другом потоке для создания нового экземпляра Socket, который принимает поток связи, установленный другим Socket.Обратите внимание, что данные, относящиеся к открытому сокету, по сути являются неуправляемым ресурсом, но их нельзя очень хорошо обернуть в объект с финализатором, потому что они часто собираются передать тому, что сборщик мусора не может увидеть.*