結構是值型別,類是引用型別的理解

2022-08-29 03:03:11 字數 1253 閱讀 3376

首先咱放個**,根據**來理解

using

system;

namespace

csharp

struct

struct

class

program

",myclass1.val);

console.writeline(""

,myclass2.val);

console.writeline(""

,struct1.val);

console.writeline(""

,struct2.val);

console.readkey(

true

); }}}

然後咱們在來個執行結果:

嘿嘿,這樣不就看出問題來了,(->_->)~~~~

來來,咱們來解釋一下:

這個程式包含了乙個結構型別struct和乙個類myclass,兩者都有乙個int型別欄位val。

在執行過程中兩者都是執行了這樣的操作:

1.宣告型別的變數;

2.在這個型別的變數中建立該型別的新例項;

3.宣告型別的第二個變數;

4.將第乙個變數賦給第二個變數;

5.在第乙個變數的例項中賦值val;

6.在第二個變數的例項中賦值val;

7.顯示兩個變數例項的val;

儘管對兩個型別的變數執行了相同的操作,但結果顯示是不同的,object型別的兩個變數值是一樣的,而結構型別的值卻是不一樣,為什麼造成這樣的結果呢?

物件是引用型別,在把物件賦給變數時,實際上是把帶有乙個指標的變數賦給了該指標所指向的物件,實際**中,指標是對記憶體的乙個位址,而位址是記憶體中該物件所在的位置,在用myclass myclass2=myclass1;時,實際上是複製了這個位址,這樣兩個變數就包含了同乙個物件的指標。

結構是值型別,其變數不是包含結構的指標,而是結構的本身,在用

struct struct2=struct1;時,實際上是把第乙個結構的資訊複製到第二個結構變數上。

好暈  暈  暈   暈  略略略~~~~

biubiubiu~~~

垃圾菜雞只能這樣啦~~~

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...

String是值型別還是引用型別(C )

msdn 中明確指出 string 是引用型別而不是值型別,但 string 表面上用起來卻像是值型別,這又是什麼原因呢?首先從下面這個例子入手 值型別 int a 1 int b a a 2 console.writeline a is b is a,b 引用型別 string str1 ab s...