三種不一樣的C# using做用,令using關鍵字在.NET程序開發過程當中佔有重要的地位,特別是進行命名空間或建立別名時。sql
C# using做用,微軟MSDN上解釋總共有三種用途:數據庫
一、引用命名空間。二、爲命名空間或類型建立別名。三、使用using語句。ide
一、引用命名空間,這樣就能夠直接在程序中引用命名空間的類型而沒必要指定詳細的命名空間。函數
這個就不用說了吧,好比你們最經常使用的:usingSystem.Text;this
二、爲命名空間或類型建立別名:spa
當同一個cs引用了不一樣的命名空間,但這些命名控件都包括了一個相同名字的類型的時候,可使用using關鍵字來建立別名,這樣會使代碼更簡潔。注意:並非說兩個名字重複,給其中一個用了別名,另一個就不須要用別名了,若是兩個都要使用,則兩個都須要用using來定義別名的。
xml
- usingSystem;
- usingaClass=NameSpace1.MyClass;
- usingbClass=NameSpace2.MyClass;
- ......
- //使用方式
- aClassmy1=newaClass();
- Console.WriteLine(my1);
- bClassmy2=newbClass();
- Console.WriteLine(my2);
三、使用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語句須要注意的幾點:seo
3.一、對象必須實現IDisposeable接口,這個已經說過,若是沒有實現編譯器會報錯誤。
如:
- using(stringstrMsg="MyTest")
- {
- Debug.WriteLine(strMsg);//Can'tbecompiled
- }
3.二、第二個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.三、當同時須要釋放多個資源時候,而且對象類型不一樣,能夠這樣寫:
- 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.四、using關鍵字只是針對C#語句,對於VB等其餘語言尚未對應的功能。