谈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
0
投稿

猜你喜欢

  • 完美解决PermGen space异常的问题

    2023-08-19 07:54:55
  • C#与C++ dll之间传递字符串string wchar_t* char* IntPtr问题

    2022-09-16 09:34:53
  • Spring Boot应用程序同时支持HTTP和HTTPS协议的实现方法

    2022-01-10 16:50:43
  • 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
  • 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
  • Java8通过Function获取字段名的方法(获取实体类的字段名称)

    2021-05-23 12:24:19
  • Java多线程实现四种方式原理详解

    2022-05-30 02:55:10
  • Springboot和bootstrap实现shiro权限控制配置过程

    2022-01-19 21:31:23
  • java导出生成word的简单方法

    2023-11-23 23:07:13
  • Java建造者模式构建复杂对象的最佳实践

    2021-06-27 10:07:16
  • Java中常见的陷阱题及答案

    2021-08-10 16:32:11
  • Spring中校验器(Validator)的深入讲解

    2022-03-05 11:58:35
  • 解决logback的日志文件路径问题

    2023-06-13 10:48:09
  • asp之家 软件编程 m.aspxhome.com