C string 特殊引用型別

2022-09-03 04:57:07 字數 2645 閱讀 8187

c#有string關鍵字,在翻譯成.net類時,它就是system.string.有了它,像字串連線和字串複製這樣的操作就簡單了.

1.  string 是引用型別還是值型別

引用型別操作

當使用過載操作符」=」給string物件賦值時,string的物件是引用型別,它保留在堆上,而不是堆疊上.因此,當把乙個字串賦給另乙個字串時,會得到對記憶體中同乙個字串的兩個引用.例如,修改其中乙個字串,就會建立乙個全新的string物件(注意,這個過程發生在」=」中),而另乙個字串沒有改變.考慮下面的**:

public class myclass

public static void main()

string str1 = "i am a number";

string str2 = str1;

console.writeline("str1 = "+str1);

console.writeline("str2 = "+str2);

str1 = "i am another number"; 

console.writeline("after str1 changed... str1 = "+str1);

console.writeline("after str1 changed... str2 = "+str2);

console.readline();

output :

str1 = i am a number

str2 = i am a number

after str1 changed...str1 = i am another number

after str1 changed...str2 = i am a number

具有值型別特徵的操作

string有兩種情況下的操作是具有值型別特徵的:

1)        在函式中傳遞string(比如函式引數是string型)時,傳遞的是位址,但卻不能修改成員變數,原因是它重新又建立了乙個全新的物件,和它想修改的那個成員變數非同一位址,所以看上去像是值型別;

2)        str1 == str2 ,僅僅是比較了值,而非位址(是ms重寫了==運算子所致).

總結:string 到底是引用型別還是值型別   答:引用型別 .   只不過它在某此操作上會表現出值型別的特徵.

string型別的另外乙個特殊性在於它是「不會變」的,每次操作string,都相當於新建了乙個string物件.

2.  」@」在string中的用法

都知道如果要使用轉義字元的話,需要在字元前加上」\」,而c#提供了一種新的機制,使用」@」.在」@」後的字串都看作是原意,不會解釋為轉義字串.並且以」@」開頭的字串支援回車換行的顯示方式(見下例).不過會增加到字串長度,不推薦過多使用.

public class myclass

public static void main()

string str1 = @"helloworld!";

string str2 = @"line1: hello

line2: world!";

console.writeline("str1 length = "+str1.length);

console.writeline("str2 length = "+str2.length);

console.readline();

output :

str1 length = 11

str2 length = 34

3.  string 和 string 的區別:

string是clr(執行時庫)的型別名字,而string是c#中的關鍵字.其實c#在編譯時,會增加**(下面列出的),將string轉換成system.string.

using string = system.string;

using sbyte = system.sbyte;

using byte = system.byte;

using short = system.int16;

using ushort = system.uint16;

using int = system.int32;

using uint = system.uint32;

4.  」@」的其它用法

在 c#  規範中, 」@」可以作為識別符號(類名、變數名、方法名等)的第乙個字元,以允許c# 中保留關鍵字作為自己定義的識別符號.

public class myclass

public static void main()

@class c = new @class();

c.@static

();console.readline();

public class @class

private int @bool;

public void @static()

console.writeline("i've been staticed...and @bool is "+this.@bool

);public @class()

this.@bool

= 999;

5.  等於null 和 等於」」的區別

string = null; //不分配記憶體

string = 「」;     //分配位元組為0的記憶體

C string 特殊的引用型別

net 框架程式設計 修訂版 中有這樣一段描述 string型別直接繼承自object,這使得它成為乙個引用型別,也就是說執行緒上的堆疊上不會駐留有任何字串。譯註 注意這裡的 直接繼承 直接繼承自object的型別一定是引用型別,因為所有的值型別都繼承自system.valuetype。值得指出的是...

C string型別(引用型別)

c string型別 引用型別 2016年03月31日 10 34 45 閱讀數 966 名稱 cts型別 說明string system.string unicode字串 string str1 hello string str2 world 這是乙個值型別的賦值,但string是乙個引用型別。s...

string是特殊的引用型別,特殊在何處

對於string這個引用型別是非常特殊乙個引用型別。它有兩點特殊的地方。第一點物件分配的特殊。例如 string str1 abcd string str2 abcd 那麼.net在分配string型別的時候,先檢視當前string型別列表是否有相同的,如果有的話,直接返回其的引用,否則重新分配。第...