首先咱放個代碼,根據代碼來理解
using System; namespace CSharp { public class MyClass { public int val; } struct Struct { public int val; } class Program { public static void Main(string[] args) { MyClass MyClass1=new MyClass(); MyClass MyClass2=MyClass1; MyClass1.val=10; MyClass2.val=20; Struct Struct1=new Struct(); Struct Struct2=Struct1; Struct1.val=30; Struct2.val=40; Console.WriteLine("{0}",MyClass1.val); Console.WriteLine("{0}",MyClass2.val); Console.WriteLine("{0}",Struct1.val); Console.WriteLine("{0}",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~~~
垃圾菜雞只能這樣啦~~~
