最近,正在簡單地學習c#的一些知識。
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可以。
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)
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的區別
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 string與string的區別 c 是區分大小寫的,但是我卻發現c 中同時存在string與string,於是我很困惑,於是我上網搜尋了一下,於是我了解了一些小知識。msdn中對string的說明 stringis analiasforstringin the net framework。st...
string 與 CString的區別
cstring 是mfc或者atl中的實現,string是c 標準庫中的實現 string和cstring均是字串模板類,string為標準模板類 stl 定義的字串類,已經納入c 標準之中 cstring typedef cstringt cstring 為visual c 中最常用的字串類,繼承...