顧名思義,C# 使用 struct 關鍵字來定義值類型,而 Class 使用 class 關鍵字來定義參考類型。在C#中,結構體中定義的變數儲存在堆疊中或以給定的變數類型存儲,其實例稱為結構體變數。然而,對於“類別”,實例被稱為物件並儲存在堆結構記憶體單元中。就建構子和析構函數而言,C# struct 不能有析構函數,但 Class 可以有析構函數。 Class 中允許進行成員分類,例如抽象類型、虛擬類型和受保護類型。
以下是 C# 結構與類別之間的 14 個最大差異。
C# 結構體和類別之間的一些主要區別如下:
代碼:
using System; namespace structAndClass { //creating structure public struct Demo { public int x, y; //parameterized constructor public Demo(int x, int y) { this.x = x; this.y = y; } } public class StructDemo { public static void Main(string[] args) { Demo a = new Demo(50, 50); Demo b = a; a.x = 100; Console.WriteLine("Value of a.x = "+a.x); Console.WriteLine("Value of b.x = "+b.x); } } }
輸出:
代碼:
using System; namespace structAndClass { public class Demo { public int x, y; public Demo(int x, int y) { this.x = x; this.y = y; } } public class StructDemo { public static void Main(string[] args) { Demo a = new Demo(50, 50); Demo b = a; a.x = 100; Console.WriteLine("Value of a.x = "+a.x); Console.WriteLine("Value of b.x = "+b.x); } } }
輸出:
讓我們透過一個比較表來看看 C# Struct 與 Class 之間的更多差異,以便清楚地理解:
Parameter | C# Struct | Class |
Data type | The structure is a value type of data type. | Class is a reference type data type. |
Keyword | The structure can be defined using the ‘struct’ keyword. | The class can be defined using the ‘class’ keyword. |
Storage area | The structure variable is stored either in stack or inline in containing type. | The object of the class is stored in heap. |
Instance creation | The instance of a struct can be created with or without a ‘new’ keyword. | The instance of the class is created using a ‘new’ keyword. |
Assignment | If we make an assignment to a variable of struct type then it creates a copy of the value being assigned. Thus, each variable instructs has its copy of data. | If we make an assignment to a variable of class type then it copies the reference. Thus, two or more variables in class can refer to the same object. |
Constructor | The structure does not contain a parameterless instance constructor. | The class contains a parameterless instance constructor, if not defined explicitly by the user. |
Destructor | It cannot have a destructor. | It can have a destructor. |
Inheritance | The structure cannot inherit from another class or structure.
The structure cannot be used as a base for another structure or class. |
The class can inherit from another class. The class can be a base class for another class. |
Data members | Members of a struct cannot be abstract, virtual or protected. | Members of a class can be abstract, virtual or protected. |
Instance | The instance of the structure is called the structure variable. | The instance of the class is called an object. |
Default access specifier | Members of the structure are public by default. | Members of the class are private by default. |
Usage | The structure can be used for small data structures. | Class is used for the complex data structure. |
Garbage collection | The instance of a struct cannot be garbage collected. | The instance of the class can be garbage collected. |
Variable initializing | Including variable initializer is not allowed while making instance field declarations instruct. | Including variable initializer is allowed while making instance field declarations in a class. |
類別和結構體都用來保存相關的資料項。對於大量資料我們可以使用類,對於小數據我們可以使用結構。類別是參考類型,儲存在堆中,而結構是值類型,儲存在堆疊中。
以上是C# 結構與類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!