C 值型別與引用型別

2021-09-30 05:11:37 字數 1440 閱讀 6475

在開始介紹c#中的資料型別之前,理解c#把資料型別分為兩種是非常重要的:

值型別引用型別

下面將詳細介紹值型別和引用型別的語法。從概念上看,其區別是值型別直

接儲存其值,而引用型別儲存對值的引用。

這兩種型別儲存在記憶體的不同地方:值型別儲存在堆疊中,而引用型別儲存

在託管堆上。注意區分某個型別是值型別還是引用型別,因為這種儲存位置的不

同會有不同的影響。

例如,int 是值型別,這表示下面的語句會在記憶體的兩個地方儲存值20:

i = 20; j = i;

但考慮下面的**。這段**假定已經定義了乙個類vector,vector 是乙個

引用型別,它有乙個int 型別的成員變數value:

vector x, y

x = new vector ();

x.value = 30; // value is a field defined in vector class

y = x;

console.writeline(y.value);

y.value = 50;

console.writeline(x.value);

要理解的重要一點是在執行這段**後,只有乙個vector 物件。x 和y 都指

向包含該物件的記憶體位置。因為x 和y 是引用型別的變數,宣告這兩個變數只是

保留了乙個引用——而不會例項化給定型別的物件。如上所示。因為x 和y 引用

同乙個物件,所以對x 的修改會影響y,反之亦然。因此上面的**會顯示30 和

50。如果變數是乙個引用,就可以把其值設定為null,表示它不引用任何物件:

y = null;把基本型別(如int 和bool)規定為值型別,而把包含許多欄位的較大

型別(通常在有類的情況下)規定為引用型別,c#設計這種方式的原因是可以得到

最佳效能。如果要把自己的型別定義為值型別,就應把它宣告為乙個結構。

string 型別

c#有string 關鍵字,在翻譯為.net 類時,它就是system.string。有了它,

像字串連線和字串複製這樣的操作就很簡單了:

string str1 = "hello ";

string str2 = "world";

string str3 = str1 + str2; // string concatenation

儘管這是乙個值型別的賦值,但string 是乙個引用型別。string 物件保留在

堆上,而不是堆疊上。因此,當把乙個字串變數賦給另乙個字串時,會得到

對記憶體中同乙個字串的兩個引用。但是,string 與引用型別在常見的操作上有

一些區別。例如,修改其中乙個字串,就會建立乙個全新的string 物件,而另

乙個字串沒有改變。對於string 型別,我們先做一下例5。

例5:string 型別例項講解

解決方案:

C 值型別與引用型別

1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...

c 引用型別與值型別

c 的值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。c 的引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。在c 中函式傳值的特點 1.對於複雜的資料型別,按引用傳遞的效率更高,因為在按值傳遞時,必須複製大量的資料 2.除非特別指定,所有的引用型別都...

C 值型別與引用型別

資料型別分為 值型別 引用型別 值型別 int char double bool 結構 struct 列舉 enum 儲存在堆疊中 引用型別 類 string。陣列 介面 儲存在託管堆中 2.值型別 變數儲存物件的值,賦值會建立值的副本,修改任何乙個副本,不會影響其他的 副本 int x 5 int...