值型別與引用型別(C )

2022-03-11 22:55:19 字數 1726 閱讀 3281

值型別主要由兩類組成:

結構分為以下幾類:

bool

使用者定義的結構

在使用 c# 中的區域性變數之前,必須對其進行初始化。 例如,可能宣告未進行初始化的區域性變數,如以下示例所示:

int myint;
那麼在將其初始化之前,無法使用此變數。 可使用下列語句將其初始化:

myint = new int();  // invoke default constructor for int type.
此語句是下列語句的等效語句:

myint = 0;    //

assign an initial value, 0

in this example.

當然,可以用同乙個語句進行宣告和初始化,如下面示例所示:

int myint = new

int();

//或int myint = 0;

使用 new 運算子時,將呼叫特定型別的預設建構函式並對變數賦以預設值。 在上例中,預設建構函式將值 0 賦給了 myint。

對於使用者定義的型別,使用 new 來呼叫預設建構函式。 例如,下列語句呼叫了 point 結構的預設建構函式:

point p = new point(); // invoke default constructor for the struct.
此呼叫後,該結構被認為已被明確賦值;也就是說該結構的所有成員均已初始化為各自的預設值。

乙個引用型別的變數不儲存它們所代表的實際資料,而是儲存對實際資料的引用(一般而言,引用會是資料儲存於儲存器或儲存裝置中的實體地址。)。

引用型別分兩步建立:首先在棧上建立乙個引用變數,然後在堆上建立物件本身,再把這個記憶體的控制代碼(也是記憶體的首位址)賦給引用變數。

首先來看一例程:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace example

public

string carname

public

car( int carspeed, string carname)

}class program

", carspeed);

console.writeline("a.carspeed = ", a.carspeed);

console.writeline("b.carname = ", b.carname);

console.writeline("c.carname = ", c.carname);

while(true);}}

}

由例程可知:int carspeed = a.carspeed ; a.carspeed = 200,這條語句申請了乙個 int 型的變數 carspeed ,它在棧裡另開闢乙個位址,把值存在其中,當 a.carspeed 的值改變時不會影響 carspeed 的值。car c = b; b.carname = 「ferrari」;,這裡把 c 指向 b,也就是說兩者在棧中存的是同乙個引用,當 b.carname 改變時,c.carname 也會改變。

下面關鍵字用於宣告引用型別:

c# 也提供了下列內建應用型別:

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...