C# using作用透析 三种用法不用愁

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

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

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

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

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

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

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

usingSystem;  
usingaClass=NameSpace1.MyClass;  
usingbClass=NameSpace2.MyClass;  
......  
//使用方式  
aClassmy1=newaClass();  
Console.WriteLine(my1);  
bClassmy2=newbClass();  
Console.WriteLine(my2); 

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

 

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

 

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

 

using(Employeeemp=newEmployee(userCode))  
{  
......  
}  
Emlpoyee.cs类:  
publicclassEmployee:IDisposable  
{  
 
实现IDisposable接口#region实现IDisposable接口  
/**////  
///通过实现IDisposable接口释放资源  
///  
publicvoidDispose()  
{  
Dispose(true);  
GC.SuppressFinalize(this);  
}  
/**////  
///释放资源实现  
///  
///  
protectedvirtualvoidDispose(booldisposing)  
{  
if(!m_disposed)  
{  
if(disposing)  
{  
//Releasemanagedresources  
if(db!=null)  
this.db.Dispose();  
if(dt!=null)  
this.dt.Dispose();  
this._CurrentPosition=null;  
this._Department=null;  
this._EmployeeCode=null;  
 
}  
//Releaseunmanagedresources  
m_disposed=true;  
}  
}  
/**////  
///析构函数  
///  
~Employee()  
{  
Dispose(false);  
}  
privateboolm_disposed;  
 
#endregion  
} 

 

 

 

 

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

 

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

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

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

 

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

 

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

 

SqlConnectionsqlConn=newSqlConnection(yourConnectionString);  
objectobjConn=sqlConn;  
using(objConnasIDisposable)  
{  
Debug.WriteLine(objConn.ToString());  
} 

 

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

 

using(SqlConnectionsqlConn=newSqlConnection(yourConnectionString))  
using(SqlCommandsqlComm=newSqlCommand(yourQueryString,sqlConn))  
{  
sqlConn.Open();//Openconnection  
//OperateDBhereusing"sqlConn"  
sqlConn.Close();//Closeconnection  
} 

 

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

 

using(FontMyFont=newFont("Arial",10.0f),MyFont2=newFont("Arial",10.0f))  
{  
//useMyFontandMyFont2  
}//compilerwillcallDisposeonMyFontandMyFont2 

 

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

 

 

 

 

 

posted on 2012-10-09 11:58  BART  阅读(117)  评论(0)    收藏  举报