1. 程式人生 > >c# using語句的用法

c# using語句的用法

前兩天看到老大的程式碼在程式碼裡運用了using語句,剛學c#以為using只是運用在程式的開始用來引入名字空間,後來上網搜了搜,發現using用在程式中還是挺有用的

找到一篇講的不錯的博文,也懶得寫,轉載至此,本人不才也加了點改動,謝謝博主

在net中有一個至關重要的關鍵字,那就是using

using一般有著以下幾種用法:

1、直接引入名稱空間

a、using System ,這個是最常用的,就是using+名稱空間,這樣就可以直接使用名稱空間中的型別,而免去了使用詳細的名稱空間

b、使用全限定名
不用使用using System;直接在程式中呼叫System.Console.WriteLine("Hello C#");

第一種方法是比較常用的方法,可以一次匯入整個名稱空間到當前名稱空間,比較方便。
不過如果在當前名稱空間只使用一次名稱空間中的某個類,例如上例使用全限定名也是合適的。

不過在某些情況下必須使用全限定名,比如在引入的兩個以上的名稱空間中有重名的類,例如System下有一個Console類,在另一個自定義的名稱空間MyNamespace中也有一個同名的Console類,這時如果我們在第三個名稱空間中同時引入了System和MyNamespace,這時如果要使用某一個具體的Console就需要使用許可權定名System.Console 或 MyNamespace.Console,否則編譯器不知道我們具體使用哪一個Console,編譯無法通過。


2.using別名。using + 別名 = 包括詳細名稱空間資訊的具體的型別。
例如我們用以下語句引入System.IO.Compression名稱空間:
using Zip=System.IO.Compression;
這時我們就可以用Zip表示System.IO.Compression名稱空間,使用Zip.GZipStream就是使用System.IO.Compression.GZipStream。給程式書寫帶來方便。


這種做法有個好處就是當同一個cs引用了兩個不同的名稱空間,但兩個名稱空間都包括了一個相同名字的型別的時候。當需要用到這個型別的時候,就每個地方都要用詳細名稱空間的辦法來區分這些相同名字的型別。而用別名的方法會更簡潔,用到哪個類就給哪個類做別名宣告就可以了。注意:並不是說兩個名字重複,給其中一個用了別名,另外一個就不需要用別名了,如果兩個都要使用,則兩個都需要用using來定義別名的。

例如:

using System;
using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;

namespace NameSpace1  
{
         public class MyClass  
         {
             public override string ToString()  
             {
                 return "You are in NameSpace1.MyClass";
             }
         }
}

namespace NameSpace2  
{
         class MyClass  
         {
             public override string ToString()  
             {
                 return "You are in NameSpace2.MyClass";
             }
         }
}

namespace testUsing
{
         using NameSpace1;
         using NameSpace2;
         /// <summary>
         /// Class1 的摘要說明。
         /// </summary>
         class Class1
         {
             /// <summary>
             /// 應用程式的主入口點。
             /// </summary>
             [STAThread]
             static void Main(string[] args)
             {
                 //
                 // TODO: 在此處新增程式碼以啟動應用程式
                 //
             
                 aClass my1 = new aClass();             
                 Console.WriteLine(my1);
                 bClass my2 = new bClass();
                 Console.WriteLine(my2);
                 Console.WriteLine("Press any key");
                 Console.Read();
             }
         }
}

3.using語句,定義一個範圍,在範圍結束時處理物件。

場景:

當在某個程式碼段中使用了類的例項,而希望無論因為什麼原因,只要離開了這個程式碼段就自動呼叫這個類例項的Dispose。要達到這樣的目的,用try...catch來捕捉異常也是可以的,但用using也很方便。

例如:

using (Class1 cls1 = new Class1(), cls2 = new Class1())
{
       // the code using cls1, cls2
  
} // call the Dispose on cls1 and cls2

這裡觸發cls1和cls2的Dispose條件是到達using語句末尾或者中途引發了異常並且控制離開了語句塊