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

c#中string的特性介紹及注意事項(xiàng)小結(jié)

 更新時(shí)間:2019年11月08日 11:37:09   作者:猴子哥  
這篇文章主要給大家介紹了關(guān)于c#中string的特性介紹及注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

string類(lèi)型在我們實(shí)際項(xiàng)目開(kāi)發(fā)中是一個(gè)最使用的類(lèi)型,string是一個(gè)引用類(lèi)型這一點(diǎn)大家都知道,但是在實(shí)際使用過(guò)程中,大家會(huì)發(fā)現(xiàn)string和我們常見(jiàn)的引用類(lèi)型使用還真不一樣,看下面的一個(gè)簡(jiǎn)單例子:

static void Main(string[] args)
  {
   string hello = "my name is yuanHong";
   Console.WriteLine(string.Format("加工前的值:{0}", hello));

   ///// 對(duì)hello進(jìn)行加工
   MachHello(hello);

   Console.WriteLine(string.Format("加工后的值:{0}", hello));

   Console.ReadLine();
  }

  /// <summary>
  /// 對(duì)hello進(jìn)行加工
  /// </summary>
  /// <param name="hello"></param>
  private static void MachHello(string hello)
  {
   hello = string.Format("{0},Nice to meet you",hello);
  }

程序運(yùn)行的實(shí)際結(jié)果是:前后值都一樣沒(méi)有發(fā)生改變,如果按照引用類(lèi)型看分析,也該是加工前后期值是不一樣的,那是為什么呢?是不是有一種感覺(jué)字符串又像是值類(lèi)型呢?好下面我們就一起探討一下string的特殊性所在。

string內(nèi)部實(shí)現(xiàn)簡(jiǎn)介

  首先:是要說(shuō)明的是string是被sealed修飾,不能繼承。

  其次:通過(guò)上面的string底層源碼,我們發(fā)現(xiàn),在底層實(shí)現(xiàn)上實(shí)際上是用的char數(shù)組來(lái)實(shí)現(xiàn),在初始化一個(gè)字符串時(shí),系統(tǒng)都已經(jīng)初始化了char數(shù)組的大小。

     string在創(chuàng)建時(shí)都固定化了大小,并且是只讀,不能修改

        在實(shí)際使用過(guò)程中,我們對(duì)string的改變,實(shí)際上在內(nèi)部是重新創(chuàng)建了一個(gè)新的字符串

        字符串在作為函數(shù)參數(shù)傳遞時(shí),實(shí)際上是拷貝了一份數(shù)據(jù)傳遞

  最后:現(xiàn)在我們?cè)诨仡^看最開(kāi)的程序結(jié)果我們就不難明白其為什么會(huì)出現(xiàn)這樣的現(xiàn)象了

string使用注意點(diǎn)

1、避免額外的存儲(chǔ)空間開(kāi)銷(xiāo)

  避免用+號(hào)來(lái)拼接字符串:

  看下面的一個(gè)實(shí)例:

string str1 = "yuan";
str1 = str1 + "hong";
//// 這樣會(huì)創(chuàng)建兩個(gè)字符串3個(gè)字符串對(duì)象

string strNew = "yuan" + "hong";/// 等效于 strNew="yuanhong",其實(shí)在編譯后也就是這個(gè)效果
//// 只會(huì)創(chuàng)建一個(gè)字符串對(duì)象

  再看一個(gè)實(shí)例:

//// 下面是兩種方式實(shí)現(xiàn)返回一個(gè)字符串123

//// 方式1 
string v11="1";
string v22=v11+"2";
string v33=v22+"3";
retun v33;
//// 采用方式1:系統(tǒng)會(huì)創(chuàng)建5個(gè)string對(duì)象

//// 方式2
//// 采用方式2:系統(tǒng)只會(huì)創(chuàng)建4個(gè)string對(duì)象
string v1="1";
string v2="2";
string v3="3";
retun v1+v2+v3;

//// 從內(nèi)存開(kāi)銷(xiāo)誰(shuí)行來(lái)說(shuō),明顯方式2要優(yōu)于方式1

  在實(shí)際開(kāi)發(fā)中,如果對(duì)字符串對(duì)象頻繁的拼接操作,建議使用StringBuilder

  當(dāng)然c#中也有一只簡(jiǎn)化字符串拼接方式:String.Format ,其實(shí)其內(nèi)部實(shí)現(xiàn)原理也就是 StringBuilder

2、盡量少的裝箱

  直接上代碼實(shí)例:

string str1 = "yunghong" + 66;

string str2 = "yunghong" + 66.ToString();

//// 查看編譯后的代碼,發(fā)現(xiàn)第一行代碼,需要有一個(gè)裝箱操作,裝箱操作,需要增加不必要的內(nèi)存開(kāi)銷(xiāo),第一:需要給值類(lèi)型本身分布內(nèi)存,同時(shí)還要給類(lèi)型指針和同板塊索引分配內(nèi)存開(kāi)銷(xiāo)

總結(jié):

  在實(shí)際開(kāi)發(fā)中需要注意一下幾點(diǎn):

  1、避免裝箱操作

  2、避免使用+號(hào)拼接字符串

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法

    C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法

    這篇文章主要介紹了C# Xamarin利用ZXing.Net.Mobile進(jìn)行掃碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C#操作非持久化內(nèi)存映射文件詳解

    C#操作非持久化內(nèi)存映射文件詳解

    多個(gè)進(jìn)程之間,通過(guò)操作未映射到磁盤(pán)上現(xiàn)有文件的內(nèi)存映射文件,可以實(shí)現(xiàn)數(shù)據(jù)共享和類(lèi)似進(jìn)程間通訊的功能,下面我們就來(lái)學(xué)習(xí)一下C#如何操作非持久化內(nèi)存映射文件的吧
    2023-12-12
  • Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    這篇文章主要介紹了Linq兩個(gè)List集合取交集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#使用foreach遍歷哈希表(hashtable)的方法

    C#使用foreach遍歷哈希表(hashtable)的方法

    這篇文章主要介紹了C#使用foreach遍歷哈希表(hashtable)的方法,是C#中foreach語(yǔ)句遍歷散列表的典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#使用DevExpress中的XtraCharts控件實(shí)現(xiàn)圖表

    C#使用DevExpress中的XtraCharts控件實(shí)現(xiàn)圖表

    這篇文章介紹了C#使用DevExpress中的XtraCharts控件實(shí)現(xiàn)圖表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#通過(guò)標(biāo)簽軟件Bartender的ZPL命令打印條碼

    C#通過(guò)標(biāo)簽軟件Bartender的ZPL命令打印條碼

    這篇文章介紹了C#通過(guò)標(biāo)簽軟件Bartender的ZPL命令打印條碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • UGUI實(shí)現(xiàn)ScrollView無(wú)限滾動(dòng)效果

    UGUI實(shí)現(xiàn)ScrollView無(wú)限滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了UGUI實(shí)現(xiàn)ScrollView無(wú)限滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#實(shí)現(xiàn)將記事本中的代碼編譯成可執(zhí)行文件的方法

    C#實(shí)現(xiàn)將記事本中的代碼編譯成可執(zhí)行文件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將記事本中的代碼編譯成可執(zhí)行文件的方法,很實(shí)用的技巧,需要的朋友可以參考下
    2014-08-08
  • 深入分析C#中處理和鍵盤(pán)相關(guān)事件的詳解

    深入分析C#中處理和鍵盤(pán)相關(guān)事件的詳解

    本篇文章是對(duì)C#中處理和鍵盤(pán)相關(guān)的事件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何在c#中使用Zlib壓縮與解壓

    如何在c#中使用Zlib壓縮與解壓

    這篇文章主要介紹了如何在c#中使用Zlib壓縮與解壓,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

三明市| 淅川县| 合川市| 宁城县| 阿合奇县| 五莲县| 沙湾县| 茂名市| 荆门市| 仙游县| 建德市| 高雄县| 渝中区| 枝江市| 辛集市| 达孜县| 长寿区| 磴口县| 铜川市| 龙南县| 潞城市| 贡嘎县| 安徽省| 曲麻莱县| 巨野县| 呼和浩特市| 泌阳县| 同德县| 治县。| 晋州市| 固镇县| 遂宁市| 云南省| 苏尼特左旗| 甘南县| 磐安县| 招远市| 吉水县| 万载县| 武宁县| 丽水市|