深入C#學習系列二:不可小瞧的using關鍵字[轉]

 
    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
{

       
實現IDisposable接口

}
        
        使用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等其他語言還沒有對應的功能。
        PS:本文章屬個人學習總結,部分內容參考互聯網上的相關文章。 其中如果發現個人總結有不正確的認知或遺漏的地方請評論告知,歡迎交流。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章