當前位置

首頁 > 商務英語 > 計算機英語 > c中using的用法

c中using的用法

推薦人: 來源: 閱讀: 2.98K 次

c中using的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c中using的用法的用法,希望對你們有用。

c中using的用法

  c中using的用法的用法如下:

using 關鍵字有兩個主要用途:

?作為指令,用於為名稱空間建立別名或匯入其他名稱空間中定義的型別。請參見 using 指令。

?作為語句,用於定義一個範圍,在此範圍的末尾將釋放物件。請參見 using 語句。

好了我們看到了MSDN給了我們答案,其中using只要有兩種用法一種是指令、另一種是語句。

那我們從指令開始吧,而在MSDN中指令又有兩種用法

1.允許在名稱空間中使用型別,這樣,您就不必在該名稱空間中限定某個型別的使用:

using ;

2為名稱空間或型別建立別名。

using Project = ect;

(1.1)第一種我們在熟悉不過了,但是你知道vs的編譯過程嗎。當我們建立一個控制檯應用程式,系統為我們生成了很多個預設的using空間。

例如:

1 using System;

2 using ric;

3 using ;

4 using ;

但是當我們寫一個hello world 程式的時候,真正用到的只有using System這個空間。可能你會說那我們引用這麼多空間幹嘛,不會佔用資源嗎?這裡我來告訴你答案。雖然我們引用了很多多餘的空間但是我們的vs卻幫我們在記憶體中引用了它需要的那些。當然從我們角度看,有沒有辦法去掉那些我們不需要的名稱空間呢?這裡我告訴你一種辦法。當我們做好整個專案的時候我們在using的區域內右擊-----組織using------移除和排序,這樣就可以去掉那些不需要的了。

(1.2)為名稱空間或型別建立別名。這個用到的不是很多,但是講到了那我們就詳細點。當我們在一個名稱空間內呼叫一個類的時候,沒有有問題的。但是當我們呼叫在兩個不同的名稱空間內的相同名字的類名時,這時你是否想到辦法呢。這就是別名的用處了,我們給兩個空間分別取個別名,然後別名.類名,這樣不是分開他們了嗎。

using別名例子

執行結果:

You are in ass

(2)using (Font font3 = new Font("Arial", 10.0f),font4 = new Font("Arial", 10.0f))

首先Font 是訪問非託管資源(本例中為檔案控制代碼和裝置上下文)的託管型別的示例。有許多其他類別的非託管資源和封裝這些資源的類庫型別。所有這些型別都必須實現 IDisposable 介面。

按照規則,當使用 IDisposable 物件時,應在 using 語句中宣告和例項化此物件。using 語句按照正確的方式呼叫物件上的 Dispose 方法,並(在您按照前面所示方式使用它時)會導致在呼叫 Dispose 時物件自身處於範圍之外。在 using 塊中,物件是隻讀的並且無法進行修改或重新分配。

using 語句確保呼叫 Dispose,即使在呼叫物件上的方法時發生異常也是如此。通過將物件放入 try 塊中,並在呼叫 finally 塊中的 Dispose,可以獲得相同的結果;實際上,這就是編譯器轉換 using 語句的方式。前面的程式碼示例在編譯時將擴充套件到以下程式碼(請注意,使用額外的大括號為物件建立有限範圍):

這句你理解了嗎?那我們從IL程式碼看看using語句的實質。

複製程式碼

1 od private hidebysig static void Main(string[] args) cil managed

2 {

3 ypoint

4 // 程式碼大小 80 (0x50)

5 tack 3

6 ls init ([0] class [ing] font3,

7 [1] class [ing] font4,

8 [2] bool CS$4$0000)

9 IL_0000: nop

10 IL_0001: ldstr "Arial"

11 IL_0006: ldc.r4 10.

12 IL_000b: newobj instance void [ing]::(string,

13 float32)

14 IL_0010: stloc.0

15

16 {

17 IL_0011: ldstr "Arial"

18 IL_0016: ldc.r4 10.

19 IL_001b: newobj instance void [ing]::(string,

20 float32)

21 IL_0020: stloc.1

22

23 {

24 IL_0021: nop

25 IL_0022: nop

26 IL_0023: leave.s IL_0035

27 } // end

28 finally

29 {

30 IL_0025: ldloc.1

31 IL_0026: ldnull

32 IL_0027: ceq

33 IL_0029: stloc.2

34 IL_002a: ldloc.2

35 IL_002b: brtrue.s IL_0034

36 IL_002d: ldloc.1

37 IL_002e: callvirt instance void [mscorlib]posable::Dispose()

38 IL_0033: nop

39 IL_0034: endfinally

40 } // end handler

41 IL_0035: nop

42 IL_0036: leave.s IL_0048

43 } // end

44 finally

45 {

46 IL_0038: ldloc.0

47 IL_0039: ldnull

48 IL_003a: ceq

49 IL_003c: stloc.2

50 IL_003d: ldloc.2

51 IL_003e: brtrue.s IL_0047

52 IL_0040: ldloc.0

53 IL_0041: callvirt instance void [mscorlib]posable::Dispose()

54 IL_0046: nop

55 IL_0047: endfinally

56 } // end handler

57 IL_0048: nop

58 IL_0049: call valuetype [mscorlib]oleKeyInfo [mscorlib]ole::ReadKey()

59 IL_004e: pop

60 IL_004f: ret

61 } // end of method Program::Main

複製程式碼

可以看到其實using對應的是try、finally來處理。

所有上面的句子等同於

複製程式碼

1 Font font3 = new Font("Arial", 10.0f);

2 try

3 {

4 Font font4 = new Font("Arial", 10.0f);

5 try

6 {

7 }

8 finally

9 {

10 if (font4 != null)

11 ((IDisposable)font4)ose();

12 }

13 }

14 finally

15 {

16 if (font3 != null)

17 ((IDisposable)font3)ose();

18 }

複製程式碼

雖然using語句使用很簡單,但是還是需要有幾點注意的地方。

ose方法用於清理物件封裝的非託管資源,而不是釋放物件的記憶體,物件的記憶體永遠有垃圾回收器控制。

2.程式在達到using語句末尾時退出using塊,而如果到達語句末尾之前引入異常則有可能提前退出。

g中初始化的物件,可以在using語句之前宣告。

如:

Font font3 = new Font("Arial", 10.0f);

Using(font3){

}

4.要使用的類必須實現IDisposable介面。