【.net基礎】--初識Struct

ZeroWM發表於2015-04-15

  其實之前學習C#的時候有接觸,不過那個時候還小~

    記得老師講作業系統的時候說過這樣一句話,軟體和硬體最大的區別就是變化。Struct是為了迎合使用者日益增長的需求而產生的。開始的時候用變數來存放資料,後來誕生了陣列,可以放很多資料型別一致的資料,Struct用來封裝小型變數組,包含不同的資料型別。

  Struct結構上跟類很相似,不過兩者也有不同。Struct是值型別,例項化在棧上,不能被繼承,預設是public,適用於經常使用的一些資料組合成的新型別; Class是物件型別,例項化在堆上,可以被繼承,預設private,適合大的複雜的資料.

    下面是一個demo,關於Struct和Class的對比。

		 class TheClass
		    {
		        public int x;
		    }
		    struct TheStruct
		    {
		        public int x;
		    }
		    class TestClass
		    {
		        public static void structtaker(TheStruct s)
		        {
		            s.x = 5;
		        }
		        public static void classtaker(TheClass c)
		        {
		            c.x = 5;
		        }
		
		
		        static void Main(string[] args)
		        {
		
		            TheStruct a = new TheStruct();
		            TheClass b = new TheClass();
		            a.x = 1;
		            b.x = 1;
		
		            structtaker(a);
		            classtaker(b);
		            Console.WriteLine("a.x={0}", a.x);
		            Console.WriteLine("b.x={0}", b.x);
		        }
		    }
效果圖:





    此結果說明class傳遞的是一個引用,傳遞給classtaker的也是b中的引用,函式裡面引數引用的和main裡面b引用的是同一塊記憶體,都在堆裡面,所以函式的改變b會反映到main裡面的b。struct傳遞是值,而非引用,是實參a的copy值,形參a儲存在堆裡面,main裡面的a儲存在棧裡面,函式改變a的值不會影響到main裡面a的值。

    知識對比著學才會更加深刻,應用的時候才可以區分的開。學會利用以前的知識網路,很重要。現在的理解還很表面,以後做專案用到,體會跟感悟會更深的!



相關文章