struct與class區別

Class和Struct之間的共同點 和 區別?
共同點:都能夠包含數據成員以及函數成員的數據結構。

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpStruct
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.1.  定義一個struct結構。(構造 析構  結構的調用 )
            Instance ex = new Instance(10,10) ;
            Console.WriteLine(ex.x);
            Console.ReadKey();
        }
        public struct Instance
        {
            public int x;
            public int y;
            public Instance(int a,int b)
            {
                this.x = a;
                this.y = b;
            }
        }
    }
}

區別:

  • Class爲引用類型,繼承自System.Object,引用類型在堆上分配地址,可以設置爲空(null);Struct爲值類型,繼承自System.ValueType.在堆棧上分配地址,不可以設置爲空(null);堆棧的執行效率比堆高,但是堆棧的資源有限,不適合處理大的邏輯對象,因此Struct適用於作爲經常使用的一些數據的新類型。Class比較適合大的和複雜的數據;

  • Struct是密封的,不能派生和繼承,也就是沒有protected和protected internal 以及sealed關鍵字;

  • Struct可以不用new初始化,在聲明時就進行了初始化工作,Struct實例無參的時候可以無new,但如果時有參的構造函數時,就要用到new,所有的變量默認爲0或者null,但是Class必須使用new關鍵字進行初始化;

  • 類作爲參數類型傳遞,傳遞的是引用地址,struct作爲參數類型傳遞,傳遞的是值。

  • Struct程序員只能申明有參的構造函數,不能包含顯示默認構造函數,因爲編譯器會自動提供一個構造函數,不能聲明析構函數;Class有默認的構造函數,可以申明無參構造函數,有析構函數。

  • calss實例由垃圾回收機制保證內存的回收處理,而struct變量使用完之後立即自動解除內存分配。

附:
你認爲在遊戲製作過程中,那些數據定義成類,那些數據定義成結構。爲什麼?
結構:一些底層的信息,如角色的座標,血量,顏色等輕量級基礎屬性;
類:複雜的可變的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章