C String與string的區別

2021-06-16 06:49:18 字數 2513 閱讀 9308

c#] string與string的區別

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

msdn中對string的說明:stringis analiasforstringin 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可以。

0. 問題:

1. c#到底是什麼時候傳引用?什麼時候傳值?

2. string傳值還是傳引用

3. string和string有什麼區別?

4. string為什麼是immutable,怎麼實現的?

以下查詢結果以及我的理解:

1. c#到底是什麼時候傳引用?什麼時候傳值?

傳值的情況 :struct、enumeration、numeric(integral/floating/decimal)、bool

傳引用的情況:class、delegate、inte***ce

當使用操作符"="以及函式傳引數的時候:

傳值的結果是把原物件複製了乙份,接收者指向原物件。

傳引用的結果是直接讓接收者指向原物件。

有人說,我硬要把值當引用傳怎麼辦?

a、用ref關鍵字

b、用陣列,陣列是class

c、涼拌:)

2. string傳值還是傳引用

c#的string宣告是class string,當然是傳引用。

不過,之所以有這個疑惑,多數是因為這個情況:

string a = "aaa";

string b = a;

b = "bbb";

或者是這麼幾行**:

public void swap(string s1, string s2)

這時候結果一列印,結果發現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的說明:stringis analiasforstringin the .net framework

呵呵string是string的別名而已,都是一家。

4. string為什麼是immutable,怎麼實現的?

immutable:物件一旦生成不可改變

關於怎麼實現的,在明白了問題2之後很好辦,只要不提供任何修改自己成員變數的方法就可以了。順便宣告為sealed,防止不清楚的後來者違反規定:)

string每個看似修改了成員變數的方法,事實上都返回了乙個新的string。

比如string.replace函式,事實上並沒有改變原來的串,這也是為什麼只有讓str =str.replace(

foo, bar

)才真正完成替換的原因。

轉處:

C String與string的區別

c 中同時存在string與string msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string 對映...

C string與String的區別

最近,正在簡單地學習c 的一些知識。c 是區分大小寫的,但是我卻發現c 中同時存在string與string,於是我很困惑,於是我上網搜尋了一下,於是我了解了一些小知識。msdn中對string的說明 string is an alias for string in the net framewor...

string 與 CString的區別

cstring 是mfc或者atl中的實現,string是c 標準庫中的實現 string和cstring均是字串模板類,string為標準模板類 stl 定義的字串類,已經納入c 標準之中 cstring typedef cstringt cstring 為visual c 中最常用的字串類,繼承...