A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李荣壮 黑马帝   /  2011-10-29 01:52  /  3780 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

using最常见的用法就是在每个代码的前面指定命令空间了,

好像还有一种用法,像try一样用的,不是很了解,

希望大家讲解下,谢谢了。

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

12 个回复

倒序浏览
using()
{

}
这种么?
简单的理解 就是用完后释放
也就是执行了下
X.Dispose();

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
除了你说的平常用的引入命名空间,还有一个就是为命名空间或者类型创建别名,比如 using Department=Business.MyCompany.Department,再一个就是数据库里通过using()块来对资源的释放,这通过调用Dispose方法来释放。
回复 使用道具 举报
陈涛 黑马帝 2011-10-29 16:30:16
板凳
using 一个是导某个命名空间,一个是在数据访问层中可以自动关闭和释放连接  try的话 我只知道try catch finally抛异常.
回复 使用道具 举报
ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理,连接资源作用域在using(){}的花括号里面,出了花括号即会被垃圾回收器回收,所以使用起来很方便,比用try catch finally代码更加简洁。
比如下面用using
  1. using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
  2.                                 AttachDBFilename=|DataDirectory|\Database1.mdf;
  3.                                 Integrated Security=True;User Instance=True"))
  4.             {
  5.                 conn.Open();
  6.                 Console.WriteLine("连接成功!");

  7.             }
复制代码
如果用try{}catch{}finally{}来看一下效果:
  1. SqlConnection con = null;
  2.             try
  3.             {
  4.                 con = new SqlConnection(@"Data Source=.\SQLEXPRESS;
  5.                                 AttachDBFilename=|DataDirectory|\Database1.mdf;
  6.                                 Integrated Security=True;User Instance=True");
  7.                 con.Open();
  8.                 Console.WriteLine("连接成功!");
  9.             }
  10.             catch (Exception ex)
  11.             {
  12.                 Console.WriteLine(ex.Message);
  13.             }
  14.             finally
  15.             {
  16.                 con.Close();
  17.             }
复制代码
回复 使用道具 举报
USING(){} 是临时引用进来一个命名空间使用这个命名空间里面的东西   使用方便简洁  且在跳出大括号后  及时进行垃圾回收方便

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
宋天琪 黑马帝 2011-11-5 09:36:31
7#
using(资源类型 资源变量 =new 等表达式){ 代码块语句 }

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
其实Using 是一种简单的写法,他的内部呢,是已经帮你实现了try{...}catch{...} finally{....} 的内容,你可以用反编译工具进去看看微软是如何实现的

using()
{

}

在ADO.NET的操作中,如果你用了Using代买块将数据库的连接和打开的一系列代码写在里面,你就可以放心大胆的往下写,就不用担心数据库连接打开和关闭的那些问题。

但当然你也可以用try{...}catch{...} finally{....} 来自己手动打开关闭数据库连接池等,但是你不觉得那样麻烦吗?而且一不小心就弄错了

所以建议还是使用Using代买块来包吧

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
毕山山 黑马帝 2011-11-12 22:01:28
9#
在c#中,using 关键字有两个主要用途:
作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。
              1、引入命名空间,如using  System
              2、为命名空间或类型创建别名。这称为“using 别名指令”,如using alias=NamespaceName;
作为语句,用于定义一个范围,在此范围的末尾将对象释放。
           如代码:
       using (SqlConnection conn = new SqlConnection(connstr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.Add(new SqlParameter("@username", username));
                    conn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        dr.Read();
                        if (dr.HasRows)
                        {
                            if (dr["password"].ToString() == psw)
                            {
                                m_user.login = username;
                                m_user.num = 0;
                            }
                            else
                            {
                                m_user.num = 2;
                            }

                        }
                        else
                        {
                            m_user.num = 1;
                        }

                    }
                }  
                 用完之后conn,cmd,dr会自动释放,等效于调用dispose()方法,用起来方便.

评分

参与人数 1技术分 +2 收起 理由
陈涛 + 2

查看全部评分

回复 使用道具 举报
王绚文 黑马帝 2011-11-13 13:38:07
10#
using里有实现了IDisposable接口的语句的时候
当出了using后 系统自动释放资源 调用dispose方法
不需要我们再手动调用!

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
周大俊 黑马帝 2011-11-15 14:27:04
11#
using()
{
...
}
执行完花括号中的语句后,对括号中的语句所占用的资源进行释放,效果同try{}catch{},不过更简洁而已。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
何旭 黑马帝 2011-12-13 13:12:16
12#
GC只能回收内存中的托管对象资源,对于非托管对象例如:数据库连接,文件句柄关于很多直接和硬件打交道的资源,GC是不能涉及的
所以.Net有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理。
using(){}自动帮我们调用Dispose 方法,和try{}catch(){}finally{file.Dispose()}差不多
  1. using (MyFile file = new MyFile()) { 6                 file.OpenFile(); 7             } 8             Console.ReadKey();
复制代码
回复 使用道具 举报
何旭 黑马帝 2011-12-13 13:14:41
13#
  1. 上面都说到GC只能回收内存中的托管对象资源,对于非托管对象例如:数据库连接,文件句柄关于很多直接和硬件打交道的资源,GC是不能涉及的
  2. 所以.Net有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理。
  3. using(){}自动帮我们调用Dispose 方法,和try{}catch(){}finally{file.Dispose()}差不多


复制代码
  1. using (MyFile file = new MyFile()) { 6                 file.OpenFile(); 7             } 8             Console.ReadKey();
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马