您好,登錄后才能下訂單哦!
小編這次要給大家分享的是淺談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#結構體的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。