關於C#結構體 你需要知道的
結構體概念
在C#中,結構體是值型別,一般適用於表示類似Point、Rectangle、Color的物件
值型別能夠降低對堆的管理、使用。降低垃圾回收,表現出更好的效能。可是值型別也有不好的一面。會涉及到裝箱拆箱等操作
結構體宣告
結構體宣告定義了一種新的資料型別,這個資料型別可以為程式包含一個以上的成員變數
要定義一個結構,需要使用struct語句
宣告一個學校的結構
struct School { public int name; public string head_master; public int class_number; public int student_number; };
結構體的使用
using System; struct School { public int school_id; public string head_master; public int class_number; public int student_number; }; public class testStructure { public static void Main(string[] args) { School TianYangHighSchool; // 宣告一個學校 // 學校詳細 TianYangHighSchool.school_id = 12345; TianYangHighSchool.head_master = "Tynam.Yang"; TianYangHighSchool.class_number = 6; TianYangHighSchool.student_number = 456; // 列印學校資訊 Console.WriteLine("田陽高中學校的學校id是:{0}," + "校長名字是:{1}," + "一共有{2}個教室," + "總共有{3}名學校",TianYangHighSchool.school_id,TianYangHighSchool.head_master,TianYangHighSchool.class_number,TianYangHighSchool.student_number); Console.ReadKey(); } }
執行結果
結構體特點
結構體可以有方法,欄位,索引器,屬性,操作符方法和事件
結構體可以有定義的建構函式,但不能是解構函式。但是不能為結構定義預設建構函式。預設建構函式是自動定義的,不能被更改
與類不同,結構體不能繼承其他結構體或類
結構體不能用作其他結構或類的基礎
結構體可以實現一個或多個介面
結構成員不能被指定為抽象,虛擬或受保護
當使用New運算子建立一個struct物件時,它將呼叫相應的建構函式。 與類不同,可以在不使用New運算子的情況下例項化結構體
如果不使用New運算子,則欄位保持未分配,並且在所有欄位初始化之前不能使用物件
結構體 VS 類
結構體是值型別,儲存在棧上,類是引用型別,儲存在託管堆上,結構體在宣告的時候就已經為其分配棧上的記憶體了,而類需要用 new為其分配堆上面的記憶體
結構體是隱式密封的,不能用 sealed 和 abstract 修飾,結構體不能被繼承,類可以被繼承
結構體中的例項欄位只能宣告,不能賦值,而類沒有限制,結構體只宣告沒有用 new 進行初始化時,可以給他的例項欄位賦值,而類不行
結構體沒有解構函式,結構體中的方法不能用 virtual 和 abstract 修飾,但是可以用 override 修飾,用來重寫父類的方法
結構體不能顯示給出預設建構函式(無引數的構造),無論有沒有自定義構造,預設構造都隱式存在,而類中有自定義建構函式時,預設構造會被隱藏,要想呼叫預設構造,必須顯示給出預設構造
結構體的自定義建構函式必須初始化所有的例項欄位和沒有初始化的非靜態屬性,類沒有限制
結構與類的選擇
堆疊的空間有限,對於大量的邏輯的物件,建立類要比建立結構好一些
結構表示如點、矩形和顏色這樣的輕量物件,例如,如果宣告一個含有 1000 個點物件的陣列,則將為引用每個物件分配附加的記憶體。在此情況下,結構的成本較低
在表現抽象和多級別的物件層次時,類是最好的選擇
大多數情況下該型別只是一些資料時,結構時最佳的選擇體的使用
以上就是關於C#結構體 你需要知道的的詳細內容,更多關於c#結構體的資料請關注我們其它相關文章!