C# 結構體(Struct)
原文鏈接:http://www.rzrgm.cn/ysmc/p/18802667
介紹
在C#中,結構體(Struct)是一種值類型數據結構,它可以封裝不同類型的數據和方法。結構體通常用于表示輕量級的對象,比如坐標點、顏色值、矩形大小等。由于結構體是值類型,當它們被賦值或傳遞給方法時,會進行值的復制。
定義結構體
要定義一個結構體,你需要使用 struct 關鍵字,后面跟上結構體的名稱和結構體的成員定義。下面是一個簡單的結構體定義的例子:
1 public struct Point 2 { 3 public int X; 4 public int Y; 5 6 public Point(int x, int y) 7 { 8 X = x; 9 Y = y; 10 } 11 12 public void Move(int dx, int dy) 13 { 14 X += dx; 15 Y += dy; 16 } 17 }
結構體特點
- 值類型:結構體是值類型,所以它們在賦值或作為方法參數傳遞時,都會創建一個新的副本。
- 堆棧分配:結構體通常在棧上分配內存,這意味著它們的分配和回收通常比引用類型(如類)更快。
- 不支持繼承:結構體不能繼承其他的結構體或類,并且所有的結構體都隱式繼承自
System.ValueType,它本身又繼承自System.Object。 - 可以實現接口:盡管結構體不能繼承其他結構體或類,但它們可以實現接口。
- 成員:結構體可以包含字段、屬性、方法、構造函數、索引器、事件和嵌套類型。但是,結構體不能包含無參的構造函數或者析構函數。
使用結構體
你可以像使用簡單類型一樣使用結構體:
1 var p1 = new Point(0, 0); 2 var p2 = p1; // 創建 p1 的一個副本 3 p2.Move(2, 3); 4 Console.WriteLine(p1.X); // 輸出 0 5 Console.WriteLine(p2.X); // 輸出 2
在這個例子中,p2 是 p1 的一個副本,所以對 p2 的修改不會影響 p1。
結構體和類的對比
- 存儲位置:結構體是值類型,存儲在棧上,而類是引用類型,存儲在堆上。
- 性能:結構體可以提供比類更好的性能,特別是當它們用于表示小型數據模型時。
- 復制行為:結構體的復制是值復制,類的復制是引用復制。
- 繼承:類支持繼承,結構體不支持。
何時使用結構體
盡管結構體在某些情況下性能更優,但并不意味著應該總是使用結構體。以下是使用結構體的一些指導原則:
- 表示的數據量較小。
- 期望的復制行為是值復制,而不是引用復制。
- 不需要利用繼承。
- 實例不會頻繁地被裝箱和拆箱(轉換為引用類型和回到值類型,這個過程可能會影響性能)。
本文來自博客園,作者:一事冇誠,轉載請注明原文鏈接:http://www.rzrgm.cn/ysmc/p/18802667

浙公網安備 33010602011771號