如果程序到达块的结尾,则将对象Dispose

Ari*_*ian 0 .net c# c#-4.0

请考虑以下代码:

1-...
2-{
  3-...
  4-SqlConnection cn=new SqlConnection();
  5-... 
6-}
Run Code Online (Sandbox Code Playgroud)

如果程序达到声明No.6将被cn处置?如果不是cn变量发生了什么?

Dar*_*rov 5

如果程序达到声明No.6将被处置?

没有.

如果不是cn变量发生了什么?

这取决于你之后是否使用它.如果您不使用它并且它超出范围,这意味着它有资格进行垃圾收集.当这个垃圾收集发生时,你无法控制.但是当它发生时,将调用析构函数,它本身会调用该Dispose方法.

这就是说正确的方法是始终将IDisposable资源包装在using语句中.这可确保始终调用Dispose方法,即使抛出异常:

2-{
  3-...
  4-using (SqlConnection cn=new SqlConnection())
    {
        ...
    }
    5-... 
6-}
Run Code Online (Sandbox Code Playgroud)