亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)英語(yǔ) > 專(zhuān)業(yè)英語(yǔ) > 計(jì)算機(jī)英語(yǔ) > c中using的用法

      c中using的用法

      時(shí)間: 長(zhǎng)思709 分享

      c中using的用法

        c中using的用法的用法你知道嗎?下面小編就跟你們?cè)敿?xì)介紹下c中using的用法的用法,希望對(duì)你們有用。

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

        using 關(guān)鍵字有兩個(gè)主要用途:

        ?作為指令,用于為命名空間創(chuàng)建別名或?qū)肫渌臻g中定義的類(lèi)型。請(qǐng)參見(jiàn) using 指令。

        ?作為語(yǔ)句,用于定義一個(gè)范圍,在此范圍的末尾將釋放對(duì)象。請(qǐng)參見(jiàn) using 語(yǔ)句。

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

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

        1.允許在命名空間中使用類(lèi)型,這樣,您就不必在該命名空間中限定某個(gè)類(lèi)型的使用:

        using System.Text;

        2為命名空間或類(lèi)型創(chuàng)建別名。

        using Project = PC.MyCompany.Project;

       ?。?.1)第一種我們?cè)谑煜げ贿^(guò)了,但是你知道vs的編譯過(guò)程嗎。當(dāng)我們創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,系統(tǒng)為我們生成了很多個(gè)默認(rèn)的using空間。

        例如:

        1 using System;

        2 using System.Collections.Generic;

        3 using System.Linq;

        4 using System.Text;

        但是當(dāng)我們寫(xiě)一個(gè)hello world 程序的時(shí)候,真正用到的只有using System這個(gè)空間。可能你會(huì)說(shuō)那我們引用這么多空間干嘛,不會(huì)占用資源嗎?這里我來(lái)告訴你答案。雖然我們引用了很多多余的空間但是我們的vs卻幫我們?cè)趦?nèi)存中引用了它需要的那些。當(dāng)然從我們角度看,有沒(méi)有辦法去掉那些我們不需要的命名空間呢?這里我告訴你一種辦法。當(dāng)我們做好整個(gè)項(xiàng)目的時(shí)候我們?cè)趗sing的區(qū)域內(nèi)右擊-----組織using------移除和排序,這樣就可以去掉那些不需要的了。

        (1.2)為命名空間或類(lèi)型創(chuàng)建別名。這個(gè)用到的不是很多,但是講到了那我們就詳細(xì)點(diǎn)。當(dāng)我們?cè)谝粋€(gè)命名空間內(nèi)調(diào)用一個(gè)類(lèi)的時(shí)候,沒(méi)有有問(wèn)題的。但是當(dāng)我們調(diào)用在兩個(gè)不同的命名空間內(nèi)的相同名字的類(lèi)名時(shí),這時(shí)你是否想到辦法呢。這就是別名的用處了,我們給兩個(gè)空間分別取個(gè)別名,然后別名.類(lèi)名,這樣不是分開(kāi)他們了嗎。

        using別名例子

        運(yùn)行結(jié)果:

        You are in NameSpace1.MyClass

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

        首先Font 是訪(fǎng)問(wèn)非托管資源(本例中為文件句柄和設(shè)備上下文)的托管類(lèi)型的示例。有許多其他類(lèi)別的非托管資源和封裝這些資源的類(lèi)庫(kù)類(lèi)型。所有這些類(lèi)型都必須實(shí)現(xiàn) IDisposable 接口。

        按照規(guī)則,當(dāng)使用 IDisposable 對(duì)象時(shí),應(yīng)在 using 語(yǔ)句中聲明和實(shí)例化此對(duì)象。using 語(yǔ)句按照正確的方式調(diào)用對(duì)象上的 Dispose 方法,并(在您按照前面所示方式使用它時(shí))會(huì)導(dǎo)致在調(diào)用 Dispose 時(shí)對(duì)象自身處于范圍之外。在 using 塊中,對(duì)象是只讀的并且無(wú)法進(jìn)行修改或重新分配。

        using 語(yǔ)句確保調(diào)用 Dispose,即使在調(diào)用對(duì)象上的方法時(shí)發(fā)生異常也是如此。通過(guò)將對(duì)象放入 try 塊中,并在調(diào)用 finally 塊中的 Dispose,可以獲得相同的結(jié)果;實(shí)際上,這就是編譯器轉(zhuǎn)換 using 語(yǔ)句的方式。前面的代碼示例在編譯時(shí)將擴(kuò)展到以下代碼(請(qǐng)注意,使用額外的大括號(hào)為對(duì)象創(chuàng)建有限范圍):

        這句你理解了嗎?那我們從IL代碼看看using語(yǔ)句的實(shí)質(zhì)。

        復(fù)制代碼

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

        2 {

        3 .entrypoint

        4 // 代碼大小 80 (0x50)

        5 .maxstack 3

        6 .locals init ([0] class [System.Drawing]System.Drawing.Font font3,

        7 [1] class [System.Drawing]System.Drawing.Font font4,

        8 [2] bool CS

      c中using的用法

      時(shí)間: 長(zhǎng)思709 分享

      c中using的用法

        c中using的用法的用法你知道嗎?下面小編就跟你們?cè)敿?xì)介紹下c中using的用法的用法,希望對(duì)你們有用。

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

        using 關(guān)鍵字有兩個(gè)主要用途:

        ?作為指令,用于為命名空間創(chuàng)建別名或?qū)肫渌臻g中定義的類(lèi)型。請(qǐng)參見(jiàn) using 指令。

        ?作為語(yǔ)句,用于定義一個(gè)范圍,在此范圍的末尾將釋放對(duì)象。請(qǐng)參見(jiàn) using 語(yǔ)句。

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

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

        1.允許在命名空間中使用類(lèi)型,這樣,您就不必在該命名空間中限定某個(gè)類(lèi)型的使用:

        using System.Text;

        2為命名空間或類(lèi)型創(chuàng)建別名。

        using Project = PC.MyCompany.Project;

       ?。?.1)第一種我們?cè)谑煜げ贿^(guò)了,但是你知道vs的編譯過(guò)程嗎。當(dāng)我們創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,系統(tǒng)為我們生成了很多個(gè)默認(rèn)的using空間。

        例如:

        1 using System;

        2 using System.Collections.Generic;

        3 using System.Linq;

        4 using System.Text;

        但是當(dāng)我們寫(xiě)一個(gè)hello world 程序的時(shí)候,真正用到的只有using System這個(gè)空間??赡苣銜?huì)說(shuō)那我們引用這么多空間干嘛,不會(huì)占用資源嗎?這里我來(lái)告訴你答案。雖然我們引用了很多多余的空間但是我們的vs卻幫我們?cè)趦?nèi)存中引用了它需要的那些。當(dāng)然從我們角度看,有沒(méi)有辦法去掉那些我們不需要的命名空間呢?這里我告訴你一種辦法。當(dāng)我們做好整個(gè)項(xiàng)目的時(shí)候我們?cè)趗sing的區(qū)域內(nèi)右擊-----組織using------移除和排序,這樣就可以去掉那些不需要的了。

       ?。?.2)為命名空間或類(lèi)型創(chuàng)建別名。這個(gè)用到的不是很多,但是講到了那我們就詳細(xì)點(diǎn)。當(dāng)我們?cè)谝粋€(gè)命名空間內(nèi)調(diào)用一個(gè)類(lèi)的時(shí)候,沒(méi)有有問(wèn)題的。但是當(dāng)我們調(diào)用在兩個(gè)不同的命名空間內(nèi)的相同名字的類(lèi)名時(shí),這時(shí)你是否想到辦法呢。這就是別名的用處了,我們給兩個(gè)空間分別取個(gè)別名,然后別名.類(lèi)名,這樣不是分開(kāi)他們了嗎。

        using別名例子

        運(yùn)行結(jié)果:

        You are in NameSpace1.MyClass

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

        首先Font 是訪(fǎng)問(wèn)非托管資源(本例中為文件句柄和設(shè)備上下文)的托管類(lèi)型的示例。有許多其他類(lèi)別的非托管資源和封裝這些資源的類(lèi)庫(kù)類(lèi)型。所有這些類(lèi)型都必須實(shí)現(xiàn) IDisposable 接口。

        按照規(guī)則,當(dāng)使用 IDisposable 對(duì)象時(shí),應(yīng)在 using 語(yǔ)句中聲明和實(shí)例化此對(duì)象。using 語(yǔ)句按照正確的方式調(diào)用對(duì)象上的 Dispose 方法,并(在您按照前面所示方式使用它時(shí))會(huì)導(dǎo)致在調(diào)用 Dispose 時(shí)對(duì)象自身處于范圍之外。在 using 塊中,對(duì)象是只讀的并且無(wú)法進(jìn)行修改或重新分配。

        using 語(yǔ)句確保調(diào)用 Dispose,即使在調(diào)用對(duì)象上的方法時(shí)發(fā)生異常也是如此。通過(guò)將對(duì)象放入 try 塊中,并在調(diào)用 finally 塊中的 Dispose,可以獲得相同的結(jié)果;實(shí)際上,這就是編譯器轉(zhuǎn)換 using 語(yǔ)句的方式。前面的代碼示例在編譯時(shí)將擴(kuò)展到以下代碼(請(qǐng)注意,使用額外的大括號(hào)為對(duì)象創(chuàng)建有限范圍):

        這句你理解了嗎?那我們從IL代碼看看using語(yǔ)句的實(shí)質(zhì)。

        復(fù)制代碼

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

        2 {

        3   .entrypoint

        4   // 代碼大小       80 (0x50)

        5   .maxstack  3

        6   .locals init ([0] class [System.Drawing]System.Drawing.Font font3,

        7            [1] class [System.Drawing]System.Drawing.Font 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 [System.Drawing]System.Drawing.Font::.ctor(string,

        13                                                                                 float32)

        14   IL_0010:  stloc.0

        15   .try

        16   {

        17     IL_0011:  ldstr      "Arial"

        18     IL_0016:  ldc.r4     10.

        19     IL_001b:  newobj     instance void [System.Drawing]System.Drawing.Font::.ctor(string,

        20                                                                                   float32)

        21     IL_0020:  stloc.1

        22     .try

        23     {

        24       IL_0021:  nop

        25       IL_0022:  nop

        26       IL_0023:  leave.s    IL_0035

        27     }  // end .try

        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]System.IDisposable::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 .try

        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]System.IDisposable::Dispose()

        54     IL_0046:  nop

        55     IL_0047:  endfinally

        56   }  // end handler

        57   IL_0048:  nop

        58   IL_0049:  call       valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()

        59   IL_004e:  pop

        60   IL_004f:  ret

        61 } // end of method Program::Main

        復(fù)制代碼

        可以看到其實(shí)using對(duì)應(yīng)的是try、finally來(lái)處理。

        所有上面的句子等同于

        復(fù)制代碼

        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).Dispose();

        12                 }

        13             }

        14             finally

        15             {

        16                 if (font3 != null)

        17                     ((IDisposable)font3).Dispose();

        18             }

        復(fù)制代碼

        雖然using語(yǔ)句使用很簡(jiǎn)單,但是還是需要有幾點(diǎn)注意的地方。

        1.Dispose方法用于清理對(duì)象封裝的非托管資源,而不是釋放對(duì)象的內(nèi)存,對(duì)象的內(nèi)存永遠(yuǎn)有垃圾回收器控制。

        2.程序在達(dá)到using語(yǔ)句末尾時(shí)退出using塊,而如果到達(dá)語(yǔ)句末尾之前引入異常則有可能提前退出。

        3.Using中初始化的對(duì)象,可以在using語(yǔ)句之前聲明。

        如:

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

        Using(font3){

        }

        4.要使用的類(lèi)必須實(shí)現(xiàn)IDisposable接口。

      00)

        9 IL_0000: nop

        10 IL_0001: ldstr "Arial"

        11 IL_0006: ldc.r4 10.

        12 IL_000b: newobj instance void [System.Drawing]System.Drawing.Font::.ctor(string,

        13 float32)

        14 IL_0010: stloc.0

        15 .try

        16 {

        17 IL_0011: ldstr "Arial"

        18 IL_0016: ldc.r4 10.

        19 IL_001b: newobj instance void [System.Drawing]System.Drawing.Font::.ctor(string,

        20 float32)

        21 IL_0020: stloc.1

        22 .try

        23 {

        24 IL_0021: nop

        25 IL_0022: nop

        26 IL_0023: leave.s IL_0035

        27 } // end .try

        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]System.IDisposable::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 .try

        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]System.IDisposable::Dispose()

        54 IL_0046: nop

        55 IL_0047: endfinally

        56 } // end handler

        57 IL_0048: nop

        58 IL_0049: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()

        59 IL_004e: pop

        60 IL_004f: ret

        61 } // end of method Program::Main

        復(fù)制代碼

        可以看到其實(shí)using對(duì)應(yīng)的是try、finally來(lái)處理。

        所有上面的句子等同于

        復(fù)制代碼

        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).Dispose();

        12 }

        13 }

        14 finally

        15 {

        16 if (font3 != null)

        17 ((IDisposable)font3).Dispose();

        18 }

        復(fù)制代碼

        雖然using語(yǔ)句使用很簡(jiǎn)單,但是還是需要有幾點(diǎn)注意的地方。

        1.Dispose方法用于清理對(duì)象封裝的非托管資源,而不是釋放對(duì)象的內(nèi)存,對(duì)象的內(nèi)存永遠(yuǎn)有垃圾回收器控制。

        2.程序在達(dá)到using語(yǔ)句末尾時(shí)退出using塊,而如果到達(dá)語(yǔ)句末尾之前引入異常則有可能提前退出。

        3.Using中初始化的對(duì)象,可以在using語(yǔ)句之前聲明。

        如:

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

        Using(font3){

        }

        4.要使用的類(lèi)必須實(shí)現(xiàn)IDisposable接口。

      熱門(mén)文章

      542997