如果"使用"中有异常,它将自动关闭

Hel*_*rld 5 c# vb.net

因为我在这里使用"使用",如果在TRY中有任何位置,FtpWebRequest,FtpWebRespons和responseStream会自动关闭吗?

Try
 Dim request As FtpWebRequest = CType(WebRequest.Create(""), FtpWebRequest)
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails

        request.Credentials = New NetworkCredential("", "")
        Using response As FtpWebResponse = CType(request.GetResponse(), FtpWebResponse)

            Using responseStream As Stream = response.GetResponseStream()
                Using reader As New StreamReader(responseStream)


                    TextBox1.Text = reader.ReadToEnd
                    TextBox1.Text += vbNewLine 
                    TextBox1.Text += vbNewLine
                    ' Use the + for appending (set the textbox to multiline)

                End Using

            End Using

        End Using    

Catch ex As Exception
     MessageBox.Show(ex.Message.ToString())
End Try
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 8

是的,这三个都将被关闭.

Using语句最终调用Dipose实现的类上的方法IDisposable(这发生在Finally编译器生成的部分中).在这种情况下,Dispose调用时这些类将关闭.

这个例子很少 - 如果流程退出(例如通过调用语句Environment.Exit的主体Using),那么Finally块和处理就不会发生.


Joh*_*ner 6

是的,除非存在堆栈溢出,否则它们将被处理掉.从文档:

Using块的行为类似于Try ... Finally构造,其中Try块使用资源而Finally块处理它们.因此,无论您如何退出块,使用块都可以保证资源的处理.即使在未处理的异常的情况下也是如此,除了StackOverflowException.


Gra*_*mas 5

他们将"自动"处置; 如果处理关闭了可以打开的东西,那么是的.