C 中的結構型別(struct type)

2022-03-04 20:58:02 字數 1730 閱讀 6289

ylbtech- .net-basic:c# 中的結構型別(struct type)

c# 中的結構型別(struct type)

1.a,相關概念返回頂部

像類一樣,結構(struct)是能夠包含資料成員和函式成員的資料結構,但是與類不同,結構是值型別,不需要堆分配。結構型別不支援使用者指定的繼承,並且所有的結構型別都隱式地從型別 object 繼承。

結構是使用 struct 關鍵字定義的,通常用來封裝小型別相關變數組,例如,矩形的座標或商品的特徵。下面的示例顯示了乙個簡單的結構型別。

public

struct

book

結構對於具有值語義的小型的資料結構特別有用。複數、座標系中的點或字典中的「鍵-值」對都是結構型別的典型示例。對小型資料結構而言,使用結構而不是用類會大大節省應用程式分配的量。例如,下面的程式建立並初始化乙個含有 100 個點的陣列。對於作為類實現的 piont,出現了 101 個例項物件,其中,陣列需要乙個,它的 100 個元素每乙個都需要乙個,具體情況看下例:

//

使用類進行「鍵-值」對的應用

using

system;

namespace

test

}class

piontclass}}

一種替代辦法是將 piont 定義為結構。

struct

piont

}

替換後,示例如下:

//

使用 struct 後的示例

using

system;

namespace

test

}class

piontclass}}

現在,只有乙個物件被例項化(即用於陣列的那個物件),而 piont 例項以值的形式直接內聯保存在陣列中。

結構建構函式也是使用 new 運算呼叫,但是這並不意味著會分配記憶體。與動態分配物件並返回對它的引用不同,結構建構函式直接返回構造值本身(通常是堆疊上的乙個臨時位置),然後根據需要複製該結構值。

對於類,兩個變數可能引用同一物件,因此對乙個變數進行操作可能影響另乙個變數所引用的物件。對於結構,每個變數都有自己的資料副本,對乙個變數操作不可能影響另乙個變數。下面的**段產生的輸出取決於 piont 是類還是構造。

piont a = new piont(10,10);

piont b= a;

a.x = 20;

console.writeline(b.x);

如果 piont 是類,將輸出是 20,因為 a 和 b 引用同一物件。如果 piont 是結構,輸出將是 10,因為將 a 對 b 的賦值建立了該值的乙個副本,因此接下來對 a.x 的賦值不會影響 b 這一副本。

前一示例突出了結構的兩個限制。首先,賦值整個結構常數不如複製物件引用的效率高,因此結構型別的賦值和值引數傳遞可能比引用型別的開銷更大。其次,除了 ref 和 out 引數,不可能建立對結構的引用,這樣限制了結構的應用範圍。

結構還可以包含建構函式、常量、字段、方法、屬性、索引器、運算子、事件和巢狀型別,但如果同時需要上述幾種成員,則應當考慮改為使用類作為型別。

結構可是實現介面,但它們無法繼承另乙個結構。因此,結構成員無法宣告為 protected。

出處:本文版權歸作者和共有,歡迎**,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。

C 中的結構型別(struct)

有時候,類中只包含極少的資料,因為管理堆而造成的開銷顯得極不合算。這種情況下,更好的做法是使用結構 struct 型別。由於 struct 是值型別,是在棧 stack 上儲存的,所以能有效的減少記憶體管理的開銷 當然前提是這個結構足夠小 結構可以包含它自己的字段 方法和構造器。int 實際上是 s...

C 中的結構型別(struct)

原文 c 中的結構型別 struct 有時候,類中只包含極少的資料,因為管理堆而造成的開銷顯得極不合算。這種情況下,更好的做法是使用結構 struct 型別。由於struct 是值型別,是在棧 stack 上儲存的,所以能有效的減少記憶體管理的開銷 當然前提是這個結構足夠小 結構可以包含它自己的字段...

c 中的結構體型別

struct 型別是一種值型別,通常用來封裝小型相關變數組,例如,矩形的座標或庫存商品的特徵。下面的示例顯示了乙個簡單的結構宣告。public struct postaladdress 結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多 儘管結構的靜態字段可以初始化,結構例項字段宣告還是不能使...