黑马程序员技术交流社区

标题: 关于using用法疑问 [打印本页]

作者: 李荣壮    时间: 2011-10-29 01:52
标题: 关于using用法疑问
using最常见的用法就是在每个代码的前面指定命令空间了,

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

希望大家讲解下,谢谢了。
作者: 黄朝辉    时间: 2011-10-29 08:19
using()
{

}
这种么?
简单的理解 就是用完后释放
也就是执行了下
X.Dispose();
作者: 杨恩锋    时间: 2011-10-29 10:30
除了你说的平常用的引入命名空间,还有一个就是为命名空间或者类型创建别名,比如 using Department=Business.MyCompany.Department,再一个就是数据库里通过using()块来对资源的释放,这通过调用Dispose方法来释放。
作者: 陈涛    时间: 2011-10-29 16:30
using 一个是导某个命名空间,一个是在数据访问层中可以自动关闭和释放连接  try的话 我只知道try catch finally抛异常.
作者: 10642491    时间: 2011-10-30 07:32
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.             }
复制代码

作者: 章坚    时间: 2011-11-1 14:08
USING(){} 是临时引用进来一个命名空间使用这个命名空间里面的东西   使用方便简洁  且在跳出大括号后  及时进行垃圾回收方便
作者: 宋天琪    时间: 2011-11-5 09:36
using(资源类型 资源变量 =new 等表达式){ 代码块语句 }
作者: yy312232557    时间: 2011-11-5 23:58
其实Using 是一种简单的写法,他的内部呢,是已经帮你实现了try{...}catch{...} finally{....} 的内容,你可以用反编译工具进去看看微软是如何实现的

using()
{

}

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

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

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

作者: 毕山山    时间: 2011-11-12 22:01
在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()方法,用起来方便.
作者: 王绚文    时间: 2011-11-13 13:38
using里有实现了IDisposable接口的语句的时候
当出了using后 系统自动释放资源 调用dispose方法
不需要我们再手动调用!
作者: 周大俊    时间: 2011-11-15 14:27
using()
{
...
}
执行完花括号中的语句后,对括号中的语句所占用的资源进行释放,效果同try{}catch{},不过更简洁而已。
作者: 何旭    时间: 2011-12-13 13: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
  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();
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2