using關鍵字,不知道的人可能對它不屑一顧,不就是用來引用命名空間嗎?可是真正對using深入了解的人,你就真的不會小瞧它了。下面就聽我給你一一道來using的用途和使用技巧。
using關鍵字微軟MSDN上解釋總共有三種用途:
1、引用命名空間。
2、為命名空間或類型創建別名。
3、使用using語句。
1、引用命名空間,這樣就可以直接在程序中引用命名空間的類型而不必指定詳細的命名空間。
這個就不用說了吧,比如大家最常用的:using System.Text;
2、為命名空間或類型創建別名:
當同一個cs引用了不同的命名空間,但這些命名控件都包括了一個相同名字的類型的時候,可以使用using關鍵字來創建別名,這樣會使代碼更簡潔。注意:並不是說兩個名字重復,給其中一個用了別名,另外一個就不需要用別名了,如果兩個都要使用,則兩個都需要用using來定義別名的。
using System;
using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;
......
//使用方式
aClass my1 = new aClass();
Console.WriteLine(my1);
bClass my2 = new bClass();
Console.WriteLine(my2);
3、使用using語句,定義一個范圍,在范圍結束時處理對象。(不過該對象必須實現了IDisposable接口)。其功能和try ,catch,Finally完全相同。
比如:
using (SqlConnection cn = new SqlConnection(SqlConnectionString)){......}//數據庫連接
using (SqlDataReader dr = db.GetDataReader(sql)){......}//DataReader
PS:這裡SqlConnection和SqlDataReader對象都默認實現了IDisposable接口,如果是自己寫的類,那就要自己手動來實現IDisposable接口。比如:
using (Employee emp = new Employee(userCode))
{
......
}
Emlpoyee.cs類:
public class Employee:IDisposable
{
#region 實現IDisposable接口
<summary>
/// 通過實現IDisposable接口釋放資源
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
<summary>
/// 釋放資源實現
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
{
if (!m_disposed)
{
if (disposing)
{
// Release managed resources
if(db!=null)
this.db.Dispose();
if(dt!=null)
this.dt.Dispose();
this._CurrentPosition = null;
this._Department = null;
this._EmployeeCode = null;
}
// Release unmanaged resources
m_disposed = true;
}
}
<summary>
/// 析構函數
/// </summary>
~Employee()
{
Dispose(false);
}
private bool m_disposed;
#endregion
}
使用using語句需要注意的幾點:
3.1、對象必須實現IDisposeable接口,這個已經說過,如果沒有實現編譯器會報錯誤。
如:
using( string strMsg = "My Test" )
{
Debug.WriteLine( strMsg );//Can't be compiled
}
3.2、第二個using對象檢查是靜態類型檢查,並不支持運行時類型檢查,因此如下形式也會出現編譯錯誤。
SqlConnection sqlConn = new SqlConnection( yourConnectionString );
object objConn = sqlConn;
using ( objConn )
{
Debug.WriteLine( objConn.ToString() );//Can't be compiled
}
不過對於後者,可以通過“as”來進行類型轉換方式來改進。
SqlConnection sqlConn = new SqlConnection( yourConnectionString );
object objConn = sqlConn;
using ( objConn as IDisposable )
{
Debug.WriteLine( objConn.ToString() );
}
3.3、當同時需要釋放多個資源時候,並且對象類型不同,可以這樣寫:
using( SqlConnection sqlConn = new SqlConnection( yourConnectionString ) )
using( SqlCommand sqlComm = new SqlCommand( yourQueryString, sqlConn ) )
{
sqlConn.Open();//Open connection
//Operate DB here using "sqlConn"
sqlConn.Close();//Close connection
}
如果對象類型相同,可以寫到一起:
using (Font MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f))
{
// use MyFont and MyFont2
} // compiler will call Dispose on MyFont and MyFont2
3.4、using關鍵字只是針對C#語句,對於VB等其他語言還沒有對應的功能。
作者“風中草帽”