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變量使用完之後立即自動解除內存分配。
附:
你認爲在遊戲製作過程中,那些數據定義成類,那些數據定義成結構。爲什麼?
結構:一些底層的信息,如角色的座標,血量,顏色等輕量級基礎屬性;
類:複雜的可變的數據。