谈C# using的用法与好处
作者:net小伙 时间:2022-02-10 08:20:01
之前的一篇文章中的代码中有一个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语句比较好。
以上就是本文的全部内容,希望对大家的学习有所帮助。
标签:C#,using
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
完美解决PermGen space异常的问题
2023-08-19 07:54:55
![](https://img.aspxhome.com/file/2023/6/70516_0s.jpg)
C#与C++ dll之间传递字符串string wchar_t* char* IntPtr问题
2022-09-16 09:34:53
Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法
2022-01-10 16:50:43
![](https://img.aspxhome.com/file/2023/2/61952_0s.jpg)
SpringBoot整合ES解析搜索返回字段问题
2023-01-26 21:39:53
java操作Apache druid的实例代码
2023-12-24 02:10:58
SpringBoot 使用 FTP 操作文件的过程(删除、上传、下载文件)
2021-07-26 10:40:05
SpringBoot @ConfigurationProperties注解的简单使用
2021-09-03 12:21:57
springboot读取配置文件中的参数具体步骤
2023-11-29 05:46:14
![](https://img.aspxhome.com/file/2023/2/59582_0s.png)
java 根据经纬度获取地址实现代码
2023-09-05 04:54:50
java模拟hibernate一级缓存示例分享
2023-06-18 08:43:55
ElasticSearch学习之ES Mapping实战示例
2023-11-25 06:12:25
基于SSM实现学生管理系统
2023-11-24 18:17:39
![](https://img.aspxhome.com/file/2023/0/59190_0s.jpg)
Java8通过Function获取字段名的方法(获取实体类的字段名称)
2021-05-23 12:24:19
![](https://img.aspxhome.com/file/2023/7/63277_0s.png)
Java多线程实现四种方式原理详解
2022-05-30 02:55:10
Springboot和bootstrap实现shiro权限控制配置过程
2022-01-19 21:31:23
![](https://img.aspxhome.com/file/2023/2/69952_0s.png)
java导出生成word的简单方法
2023-11-23 23:07:13
Java建造者模式构建复杂对象的最佳实践
2021-06-27 10:07:16
![](https://img.aspxhome.com/file/2023/8/61808_0s.png)
Java中常见的陷阱题及答案
2021-08-10 16:32:11
Spring中校验器(Validator)的深入讲解
2022-03-05 11:58:35
![](https://img.aspxhome.com/file/2023/5/71245_0s.jpg)
解决logback的日志文件路径问题
2023-06-13 10:48:09
![](https://img.aspxhome.com/file/2023/9/63759_0s.jpg)