最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# using的本質(zhì)及使用詳解

 更新時(shí)間:2022年09月02日 11:44:09   作者:知其所以然  
這篇文章主要為大家介紹了C# using的本質(zhì)及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

01.點(diǎn)明觀(guān)點(diǎn)

C#中,非托管資源使用之后必須釋放,而using()是使用非托管資源的最佳方式,可以確保資源在代碼塊結(jié)束之后被正確釋放,并且代碼更簡(jiǎn)潔。

這里說(shuō)的非托管資源指的是實(shí)現(xiàn)IDisposable或IAsyncDisposable接口的類(lèi)。

using是如何實(shí)現(xiàn)資源釋放?本文將予以解答。

02.C#中,using的兩個(gè)作用

第一種:引入命名空間

用法如下:

using System.Text;
using s = System.Text;       //為命名空間定義別名
using static System.Math;    //引入類(lèi)型靜態(tài)成員
global using System.Math;    //全局引入

第二種:聲明一個(gè)對(duì)象,并確保該對(duì)象在代碼塊執(zhí)行完之后被釋放(Dispose())。

這里主要對(duì)第二種用法進(jìn)行分析。

03.using如何實(shí)現(xiàn)資源釋放

通常,我們以下面的形式聲明一個(gè)非托管資源,當(dāng)代碼塊執(zhí)行完之后,資源會(huì)自動(dòng)釋放,那程序是如何做到的呢?

using (var file = File.Open("filePath", FileMode.OpenOrCreate))
{
    //do something
}

說(shuō)起來(lái)也簡(jiǎn)單:

using(...)語(yǔ)句經(jīng)編譯器編譯之后,轉(zhuǎn)換了try{...}finally{...}

上面的代碼,經(jīng)程序編譯后的代碼如下:

FileStream file = File.Open("filePath", FileMode.OpenOrCreate);
try
{
  //do something
}
finally
{
  if (file!= null)
  {
    ((IDisposable)file).Dispose();
  }
}

兩段代碼的運(yùn)行結(jié)果是一樣的,對(duì)比之下,很明顯,使用using()的代碼更簡(jiǎn)潔。

04.實(shí)踐探索

實(shí)踐出真知,我們通過(guò)一個(gè)例子,使用反編譯工具(ILSpy或ILDasm)查看生成的DLL,進(jìn)行驗(yàn)證。

首先,定義一個(gè)實(shí)現(xiàn)了IDisposable接口的類(lèi)。當(dāng)然也可以使用.NET中內(nèi)置的類(lèi),這里采用自定義類(lèi)是為了驗(yàn)證,只要是實(shí)現(xiàn)了IDisposable接口的類(lèi),都可以使用這種方式。

然后,使用using創(chuàng)建資源對(duì)象。

最后,查看編譯后生成的IL代碼文件,可以看到確實(shí)如上面所說(shuō),using(...)語(yǔ)句經(jīng)編譯器編譯之后,轉(zhuǎn)換了try{...}finally{...},并且在finally{}中完成了對(duì)Dispose()方法的調(diào)用。

至此,using()如何完成對(duì)非托管資源的釋放,就很清楚了。

05.總結(jié)

  • using()語(yǔ)句編譯后生成 try{...} finally{...} 語(yǔ)句,進(jìn)而確保資源釋放。
  • using()是程序中使用非托管資源的最佳方式。
  • using()的本質(zhì)是C#中的語(yǔ)法糖。

糖讓人快樂(lè),同樣語(yǔ)法糖也能讓編程變得快樂(lè),類(lèi)似using()的語(yǔ)法糖,可以簡(jiǎn)化代碼,確保必要邏輯的正確執(zhí)行;糖只是調(diào)味劑,同樣語(yǔ)法糖也只是簡(jiǎn)化編碼,核心業(yè)務(wù)邏輯,還需要開(kāi)發(fā)人員完成。

using的用法很簡(jiǎn)單,在合適的場(chǎng)景下正確使用,可以讓開(kāi)發(fā)工作事半功倍。

以上就是C# using的本質(zhì)及使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C# using使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類(lèi)及其方法

    C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類(lèi)及其方法

    TreeView?控件在?C#?中主要用于顯示分層結(jié)構(gòu)的數(shù)據(jù),這通常是一個(gè)文件系統(tǒng)的表示,但也可以是任何具有父子關(guān)系的數(shù)據(jù)集合,本文給大家介紹了C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類(lèi)及其方法,需要的朋友可以參考下
    2024-03-03
  • c# 修改windows中賬戶(hù)的用戶(hù)名和密碼

    c# 修改windows中賬戶(hù)的用戶(hù)名和密碼

    這篇文章主要介紹了c# 改變windows中賬戶(hù)的用戶(hù)名和密碼,幫助大家更好的理解和學(xué)習(xí)C#,感興趣的朋友可以了解下
    2020-11-11
  • Unity實(shí)現(xiàn)移動(dòng)端手勢(shì)解鎖功能

    Unity實(shí)現(xiàn)移動(dòng)端手勢(shì)解鎖功能

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)移動(dòng)端手勢(shì)解鎖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C# 程序集和反射詳解

    C# 程序集和反射詳解

    本文主要介紹了C# 程序集和反射的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • C#控制臺(tái)實(shí)現(xiàn)飛行棋游戲

    C#控制臺(tái)實(shí)現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了C#控制臺(tái)實(shí)現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 基于C#實(shí)現(xiàn)語(yǔ)音識(shí)別功能詳解

    基于C#實(shí)現(xiàn)語(yǔ)音識(shí)別功能詳解

    在.NET4.0中,可以借助System.Speech組件讓電腦來(lái)識(shí)別我們的聲音。本文將利用該組件實(shí)現(xiàn)語(yǔ)音識(shí)別功能,文中實(shí)現(xiàn)過(guò)程講解詳細(xì),需要的可以參考一下
    2022-04-04
  • C#實(shí)現(xiàn)字符串首字母大寫(xiě)的方法示例

    C#實(shí)現(xiàn)字符串首字母大寫(xiě)的方法示例

    這篇文章主要給大家介紹了關(guān)于利用C#實(shí)現(xiàn)字符串首字母大寫(xiě)的相關(guān)資料,這是在最近工作中遇到的一個(gè)需求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • C# 實(shí)現(xiàn)顏色漸變窗體控件詳細(xì)講解

    C# 實(shí)現(xiàn)顏色漸變窗體控件詳細(xì)講解

    這篇文章主要介紹了C# 實(shí)現(xiàn)顏色漸變窗體控件詳細(xì)講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • C# 視頻播放類(lèi)

    C# 視頻播放類(lèi)

    c#下實(shí)現(xiàn)視頻播放的類(lèi)代碼。
    2009-06-06
  • C#繪制實(shí)時(shí)曲線(xiàn)的方法

    C#繪制實(shí)時(shí)曲線(xiàn)的方法

    這篇文章主要為大家詳細(xì)介紹了C#繪制實(shí)時(shí)曲線(xiàn)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

麻江县| 邵东县| 巴林右旗| 成安县| 庄河市| 三台县| 康乐县| 新晃| 剑河县| 清河县| 柞水县| 思茅市| 浏阳市| 焦作市| 饶河县| 梨树县| 玉龙| 都江堰市| 林周县| 阜阳市| 沧州市| 连州市| 凤城市| 凤山市| 横峰县| 融水| 内乡县| 台东市| 淅川县| 观塘区| 呈贡县| 乌审旗| 淄博市| 万山特区| 苍山县| 维西| 华安县| 淮滨县| 昆明市| 裕民县| 格尔木市|