欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

谈C# using的用法与好处

程序员文章站 2022-06-05 13:35:59
之前的一篇文章中的代码中有一个using的用法,刚开始查看了一些资料说是强制关闭对象的一个命令。今天又查了一些资料,才明白,原来using指令调用了一个方法——dispos...

之前的一篇文章中的代码中有一个using的用法,刚开始查看了一些资料说是强制关闭对象的一个命令。今天又查了一些资料,才明白,原来using指令调用了一个方法——dispose()方法。而dispose()方法的作用就是释放所有的使用资源。

例:

public void executecommand( string connstring, string commandstring ) 
{ 
 sqlconnection myconnection = new sqlconnection( connstring ); 
 sqlcommand mysqlcommand = new sqlcommand( commandstring, 
  myconnection ); 
 
 myconnection.open(); 
 mysqlcommand.executenonquery(); 
} 

这个例子中的两个可处理对象没有被恰当的释放:sqlconnection和sqlcommand。两个对象同时保存在内存里直到析构函数被调用。

解决这个问题的方法就是在使用完命令和链接后就调用它们的dispose:

public void executecommand( string connstring, string commandstring ) 
{ 
 sqlconnection myconnection = new sqlconnection( connstring ); 
 sqlcommand mysqlcommand = new sqlcommand( commandstring, 
  myconnection ); 
 
 myconnection.open(); 
 mysqlcommand.executenonquery(); 
 
 mysqlcommand.dispose( ); 
 myconnection.dispose( ); 
} 

使用using语句也可以很好的实现此功能,而且代码很清晰:

public void executecommand( string connstring, string commandstring ) 
{ 
 using ( sqlconnection myconnection = new  sqlconnection( connstring )) 
 { 
  using ( sqlcommand mysqlcommand = new sqlcommand( commandstring, myconnection )) 
  { 
   myconnection.open(); 
   mysqlcommand.executenonquery(); 
  } 
 } 
} 

当你在一个函数内使用一个可处理对象时,using语句是最简单的方法来保证这个对象被恰当的处理掉。当这些对象被分配时,会被编译器放到一个try/finally块中。

sqlconnection myconnection = null; 
 
// example using clause: 
using ( myconnection = new sqlconnection( connstring )) 
{ 
 myconnection.open(); 
} 
 
 
// example try / catch block: 
try { 
 myconnection = new sqlconnection( connstring ); 
 myconnection.open(); 
} 
finally { 
 myconnection.dispose( ); 
} 

有时候使用try/finally块的时候会发现如果发生错误,程序不会报错。本人感觉还是使用using语句比较好。
以上就是本文的全部内容,希望对大家的学习有所帮助。