轉 C#String與string的區別

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   ar   使用   for   strong   

C#是區分大小寫,但是我卻發現C#中同時存在String與string,於是我很困惑,於是我上網搜尋了一下,於是我瞭解了一些小知識。

MSDN中對string的說明: string is an alias for String in the .NET Framework。string是String的別名而已,string是c#中的類,String是Framework的類,C# string 映射為 Framework的 String。如果用string,編譯器會把它編譯成String,所以如果直接用String就可以讓編譯器少做一點點工作。

如果使用C#,建議使用string,比較符合規範 。 string始終代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的時候並且當前命名空間中沒有名為String的類型(class、struct、delegate、enum)的時候才代表System.String。

string是關鍵字,String不是,也就是說string不能作為類、結構、枚舉、欄位、變數、方法、屬性的名稱,而String可以。

 

 

今天突然用到C#的string,突然想起來一直沒弄明白string和String有什麼區別,查了一下電子書、MSDN以及百度和Google,更進一步看看String的一些問題。 0.  問題: 1.  C#到底是什麼時候傳引用?什麼時候傳值? 2. String傳值還是傳引用 3. string和String有什麼區別? 4.  String為什麼是Immutable,怎麼實現的? 以下查詢結果以及我的理解: 1. C#到底是什麼時候傳引用?什麼時候傳值? 傳值的情況 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool 傳引用的情況:class、Delegate、Interface 當使用操作符"="以及函數傳參數的時候:        傳值的結果是把原對象複製了一份,接收者指向原對象。        傳引用的結果是直接讓接收者指向原對象。 有人說,我硬要把值當引用傳怎麼辦?a、用ref關鍵字b、用數組,數組是classc、涼拌:) 2.  String傳值還是傳引用 C#的String聲明是class  String,當然是傳引用。不過,之所以有這個疑惑,多數是因為這個情況:string a = "aaa";string b = a;b = "bbb";或者是這麼幾行代碼:public void Swap(string s1, string s2){    string temp=s1;    s1=s2;    s2=temp;}這時候結果一列印,結果發現a的值還沒有變,Swap也沒有成功,這時候就會有幻覺:是不是沒有傳引用啊?呵呵,string不會這麼粗暴的打亂“聲明為class就是傳引用”這種規則的。分析一下:string a = "aaa"; //==> a----->new  String("aaa")string b = a;         //==> b----->a, 傳引用b =  "bbb";          //==>  b----->new String("bbb"), 傳引用,b指向了一個新的字串,a並沒有變。 Swap函數也是這樣,比如說傳了a, b進去(a="aaa", b="bbb"),//s1----->a, s2----->b    string  temp=s1;//temp----->s1----->a     s1=s2;                //s1----->s2----->b;     s2=temp;           //s2----->temp----->a結果是,s1和s2確實是Swap了,但是這種結果並不會影響到a和b 3. string和String有什麼區別?MSDN中對string的說明: string is an  alias for String in the .NET  Framework呵呵string是String的別名而已,都是一家。 4.  String為什麼是Immutable,怎麼實現的? immutable:對象一旦產生不可改變關於怎麼實現的,在明白了問題2之後很好辦,只要不提供任何修改自己成員變數的方法就可以了。順便聲明為sealed,防止不清楚的後來者違反規定:)String每個看似修改了成員變數的方法,事實上都返回了一個新的String。比如String.Replace函數,事實上並沒有改變原來的串,這也是為什麼只有讓 str  = str.Replace( foo, bar)才真正完成替換的原因。

轉 C#String與string的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.