9 7結構型別

2021-09-08 10:29:25 字數 1130 閱讀 4441

第8章提到過結構和類非常相似,但結構是值型別,而類是引用型別。這意味著什麼?最簡單的方式是用乙個示例來說明

class

chapter09ex03

", objecta.val);

console.writeline(

"objectb.val =

", objectb.val);

console.writeline(

"structa.val =

", structa.val);

console.writeline(

"structb.val =

", structb.val);

}}

這個應用程式包含兩個型別定義。乙個是結構mystruct的定義,它有乙個public int欄位val,另外乙個是類myclass的定義,它包含乙個相同的字段(第10章介紹類的成員,如欄位,現在只要知道它們的語法是相同的即可)。

接著對兩種型別的例項執行相同的操作:

儘管對兩種型別的變數執行了相同的操作,但結果是不同的。在顯示val欄位的值時,兩個object型別有相同的值,而結構型別有不同的值。為什麼會這樣呢?

物件是引用型別。在把物件賦給變數時,實際上是把帶有乙個指標的變數賦給了該指標所指向的物件。在實際**中,指標是記憶體中的第乙個位址。在這種情況下,位址是記憶體中該物件所在的位置。在下面的**,把第乙個物件引用賦給型別myclass的第二個變數時,實際上是複製了這個位址。

myclass objectb=objecta;

這樣兩個變數就包含同乙個物件的指標。

結構是值型別。其變數並不是包含結構的指標,而是包含結構本身。在用下面的**把第乙個結構賦給型別為mystruct的第二個變數時,實際上是把第乙個結構的所有資訊複製到另乙個結構中。

mystruct structb=structa;

這個過程與本書前面介紹的簡單變數型別如int是一樣的。最終的結果是兩個結構型別變數包含不同的結構。使用指標的技術隱藏在託管c#**中,它使得**更簡單。使用c#中的不安全**可以進行低階操作,如指標操作,但這是乙個較高階的論題,這裡不討論。

9 7結構型別

第8章提到過結構和類非常相似,但結構是值型別,而類是引用型別。這意味著什麼?最簡單的方式是用乙個示例來說明 class chapter09ex03 objecta.val console.writeline objectb.val objectb.val console.writeline stru...

9 7結構型別

第8章提到過結構和類非常相似,但結構是值型別,而類是引用型別。這意味著什麼?最簡單的方式是用乙個示例來說明 class chapter09ex03 objecta.val console.writeline objectb.val objectb.val console.writeline stru...

9 7考試總結

今天考試因為一些原因,爆0了。我感覺我一些錯誤反覆的犯。t1 期望dp理解出錯 一道期望 概率dp。我這道題目犯了乙個很大的錯,在期望上又一次正推了。上次wearry的題也犯了這個錯誤,然而這次在考場上看出來了。卻沒有感覺到自己錯了。其實期望是在選了前面的基礎上繼續遞推的,形如p1 a1 p2 a2...