欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

string類型在我們實際項目開發(fā)中是一個最使用的類型,string是一個引用類型這一點大家都知道,但是在實際使用過程中,大家會發(fā)現(xiàn)string和我們常見的引用類型使用還真不一樣,看下面的一個簡單例子:

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

   ///// 對hello進行加工
   MachHello(hello);

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

   Console.ReadLine();
  }

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

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

string內(nèi)部實現(xiàn)簡介

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

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

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

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

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

  最后:現(xiàn)在我們在回頭看最開的程序結(jié)果我們就不難明白其為什么會出現(xiàn)這樣的現(xiàn)象了

string使用注意點

1、避免額外的存儲空間開銷

  避免用+號來拼接字符串:

  看下面的一個實例:

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

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

  再看一個實例:

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

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

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

//// 從內(nèi)存開銷誰行來說,明顯方式2要優(yōu)于方式1

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

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

2、盡量少的裝箱

  直接上代碼實例:

string str1 = "yunghong" + 66;

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

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

總結(jié):

  在實際開發(fā)中需要注意一下幾點:

  1、避免裝箱操作

  2、避免使用+號拼接字符串

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

相關文章

  • C#使用Ado.net讀取Excel表的方法

    C#使用Ado.net讀取Excel表的方法

    這篇文章主要介紹了C#使用Ado.net讀取Excel表的方法,涉及C#使用OLEDB操作Excel的方法,需要的朋友可以參考下
    2015-04-04
  • 基于WPF編寫一個串口轉(zhuǎn)UDP工具

    基于WPF編寫一個串口轉(zhuǎn)UDP工具

    串口是設備和上位機通信的常用接口,UDP則是網(wǎng)絡通信常用的通信協(xié)議,串口和UDP之間的相互轉(zhuǎn)換是非常有意義的。本文就利用WPF編寫一個串口轉(zhuǎn)UDP工具,需要的可以參考一下
    2023-04-04
  • 深入多線程之:Wait與Pulse的使用詳解

    深入多線程之:Wait與Pulse的使用詳解

    本篇文章是對Wait與Pulse的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)UI控件輸出日志的方法詳解

    C#實現(xiàn)UI控件輸出日志的方法詳解

    一般情況下,我們的日志文件是用來記錄一些關鍵操作或者異常,并且是后臺存儲,并不對外開放的,但是也有些時候,需要將一些操作步驟、記錄等直接顯示在窗體上。本文就將利用UI控件輸出日志效果,需要的可以參考一下
    2022-10-10
  • Unity實現(xiàn)簡單虛擬搖桿

    Unity實現(xiàn)簡單虛擬搖桿

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)簡單虛擬搖桿,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#中DataTable實現(xiàn)行列轉(zhuǎn)換的方法

    C#中DataTable實現(xiàn)行列轉(zhuǎn)換的方法

    這篇文章主要介紹了C#中DataTable實現(xiàn)行列轉(zhuǎn)換的方法,實例分析了C#操作DataTable的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中的multipart/form-data提交文件和參數(shù)

    C#中的multipart/form-data提交文件和參數(shù)

    這篇文章主要介紹了C#中的multipart/form-data提交文件和參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#把dll分別放在指定的文件夾的方法步驟

    C#把dll分別放在指定的文件夾的方法步驟

    本文主要介紹了C#把dll分別放在指定的文件夾的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 深入分析C#中的異步和多線程

    深入分析C#中的異步和多線程

    這篇文章主要介紹了C#中異步和多線程的相關資料,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2021-01-01
  • 如何在c#中使用opencv函數(shù)庫

    如何在c#中使用opencv函數(shù)庫

    這篇文章主要介紹了如何在c#中使用opencv,對圖像匹配處理感興趣的同學可以參考下
    2021-04-04

最新評論