C# using作用透析 三種用法不用愁
三種不同的C# using作用,令using關鍵字在.NET程序開發(fā)過程中占有重要的地位,特別是進行命名空間或創(chuàng)建別名時。
C# using作用,微軟MSDN上解釋總共有三種用途:
1、引用命名空間。2、為命名空間或類型創(chuàng)建別名。3、使用using語句。
1、引用命名空間,這樣就可以直接在程序中引用命名空間的類型而不必指定詳細的命名空間。
這個就不用說了吧,比如大家最常用的:usingSystem.Text;
2、為命名空間或類型創(chuàng)建別名:
當同一個cs引用了不同的命名空間,但這些命名控件都包括了一個相同名字的類型的時候,可以使用using關鍵字來創(chuàng)建別名,這樣會使代碼更簡潔。注意:并不是說兩個名字重復,給其中一個用了別名,另外一個就不需要用別名了,如果兩個都要使用,則兩個都需要用using來定義別名的。
- usingSystem;
- usingaClass=NameSpace1.MyClass;
- usingbClass=NameSpace2.MyClass;
- ......
- //使用方式
- aClassmy1=newaClass();
- Console.WriteLine(my1);
- bClassmy2=newbClass();
- Console.WriteLine(my2);
3、使用using語句,定義一個范圍,在范圍結束時處理對象。(不過該對象必須實現(xiàn)了IDisposable接口)。其功能和try,catch,Finally完全相同。
比如:
- using(SqlConnectioncn=newSqlConnection(SqlConnectionString)){......}//數(shù)據(jù)庫連接
- using(SqlDataReaderdr=db.GetDataReader(sql)){......}//DataReader
PS:這里SqlConnection和SqlDataReader對象都默認實現(xiàn)了IDisposable接口,如果是自己寫的類,那就要自己手動來實現(xiàn)IDisposable接口。比如:
- using(Employeeemp=newEmployee(userCode))
- {
- ......
- }
- Emlpoyee.cs類:
- publicclassEmployee:IDisposable
- {
- 實現(xiàn)IDisposable接口#region實現(xiàn)IDisposable接口
- /**////
- ///通過實現(xiàn)IDisposable接口釋放資源
- ///
- publicvoidDispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- /**////
- ///釋放資源實現(xiàn)
- ///
- ///
- 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;
- }
- }
- /**////
- ///析構函數(shù)
- ///
- ~Employee()
- {
- Dispose(false);
- }
- privateboolm_disposed;
- #endregion
- }
使用using語句需要注意的幾點:
3.1、對象必須實現(xiàn)IDisposeable接口,這個已經(jīng)說過,如果沒有實現(xiàn)編譯器會報錯誤。
如:
- using(stringstrMsg="MyTest")
- {
- Debug.WriteLine(strMsg);//Can'tbecompiled
- }
3.2、第二個using對象檢查是靜態(tài)類型檢查,并不支持運行時類型檢查,因此如下形式也會出現(xiàn)編譯錯誤。
- 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等其他語言還沒有對應的功能。
PS:本C# using的三種作用屬個人學習總結,歡迎交流。
【編輯推薦】