C# using作用透析 三种用法

三种不同的C# using作用,令using关键字在.NET程序开发过程中占有重要的地位,特别是进行命名空间或创建别名时。

    C# using作用,微软MSDN上解释总共有三种用途

    1、引用命名空间。2、为命名空间或类型创建别名。3、使用using语句。

    1、引用命名空间,这样就可以直接在程序中引用命名空间的类型而不必指定详细的命名空间。

    这个就不用说了吧,比如大家最常用的:usingSystem.Text;

    2、为命名空间或类型创建别名:

    当同一个cs引用了不同的命名空间,但这些命名控件都包括了一个相同名字的类型的时候,可以使用using关键字来创建别名,这样会使代码更简洁。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。

 
 
  1. usingSystem;
  2. usingaClass=NameSpace1.MyClass;
  3. usingbClass=NameSpace2.MyClass;
  4. ......
  5. //使用方式
  6. aClassmy1=newaClass();
  7. Console.WriteLine(my1);
  8. bClassmy2=newbClass();
  9. Console.WriteLine(my2);

    3、使用using语句,定义一个范围,在范围结束时处理对象。(不过该对象必须实现了IDisposable接口)。其功能和try,catch,Finally完全相同。
比如:

 
 
  1. using(SqlConnectioncn=newSqlConnection(SqlConnectionString)){......}//数据库连接
  2. using(SqlDataReaderdr=db.GetDataReader(sql)){......}//DataReader

    PS:这里SqlConnection和SqlDataReader对象都默认实现了IDisposable接口,如果是自己写的类,那就要自己手动来实现IDisposable接口。比如:

 
 
  1. using(Employeeemp=newEmployee(userCode))
  2. {
  3. ......
  4. }
  5. Emlpoyee.cs类:
  6. publicclassEmployee:IDisposable
  7. {
  8. 实现IDisposable接口#region实现IDisposable接口
  9. /**////
  10. ///通过实现IDisposable接口释放资源
  11. ///
  12. publicvoidDispose()
  13. {
  14. Dispose(true);
  15. GC.SuppressFinalize(this);
  16. }
  17. /**////
  18. ///释放资源实现
  19. ///
  20. ///
  21. protectedvirtualvoidDispose(booldisposing)
  22. {
  23. if(!m_disposed)
  24. {
  25. if(disposing)
  26. {
  27. //Releasemanagedresources
  28. if(db!=null)
  29. this.db.Dispose();
  30. if(dt!=null)
  31. this.dt.Dispose();
  32. this._CurrentPosition=null;
  33. this._Department=null;
  34. this._EmployeeCode=null;
  35. }
  36. //Releaseunmanagedresources
  37. m_disposed=true;
  38. }
  39. }
  40. /**////
  41. ///析构函数
  42. ///
  43. ~Employee()
  44. {
  45. Dispose(false);
  46. }
  47. privateboolm_disposed;
  48. #endregion
  49. }

    使用using语句需要注意的几点:

    3.1、对象必须实现IDisposeable接口,这个已经说过,如果没有实现编译器会报错误。
如:

 
 
  1. using(stringstrMsg="MyTest")
  2. {
  3. Debug.WriteLine(strMsg);//Can'tbecompiled
  4. }

    3.2、第二个using对象检查是静态类型检查,并不支持运行时类型检查,因此如下形式也会出现编译错误。

 
 
  1. SqlConnectionsqlConn=newSqlConnection(yourConnectionString);
  2. objectobjConn=sqlConn;
  3. using(objConn)
  4. {
  5. Debug .WriteLine(objConn.ToString());//Can'tbecompiled }

    不过对于后者,可以通过“as”来进行类型转换方式来改进。

 
 
  1. SqlConnectionsqlConn=newSqlConnection(yourConnectionString);
  2. objectobjConn=sqlConn;
  3. using(objConnasIDisposable)
  4. {
  5. Debug.WriteLine(objConn.ToString());
  6. }

    3.3、当同时需要释放多个资源时候,并且对象类型不同,可以这样写:

 
 
  1. using(SqlConnectionsqlConn=newSqlConnection(yourConnectionString))
  2. using(SqlCommandsqlComm=newSqlCommand(yourQueryString,sqlConn))
  3. {
  4. sqlConn.Open();//Openconnection
  5. //OperateDBhereusing"sqlConn"
  6. sqlConn.Close();//Closeconnection
  7. }

    如果对象类型相同,可以写到一起:

 
 
  1. using(FontMyFont=newFont("Arial",10.0f),MyFont2=newFont("Arial",10.0f))
  2. {
  3. //useMyFontandMyFont2
  4. }//compilerwillcallDisposeonMyFontandMyFont2

    3.4、using关键字只是针对C#语句,对于VB等其他语言还没有对应的功能。

    PS:本C# using的三种作用属个人学习总结,欢迎交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值