關(guān)于C#結(jié)構(gòu)體 你需要知道的
結(jié)構(gòu)體概念
在C#中,結(jié)構(gòu)體是值類型,一般適用于表示類似Point、Rectangle、Color的對象
值類型能夠降低對堆的管理、使用。降低垃圾回收,表現(xiàn)出更好的性能??墒侵殿愋鸵灿胁缓玫囊幻?。會涉及到裝箱拆箱等操作
結(jié)構(gòu)體聲明
結(jié)構(gòu)體聲明定義了一種新的數(shù)據(jù)類型,這個數(shù)據(jù)類型可以為程序包含一個以上的成員變量
要定義一個結(jié)構(gòu),需要使用struct語句
聲明一個學校的結(jié)構(gòu)
struct School
{
public int name;
public string head_master;
public int class_number;
public int student_number;
};
結(jié)構(gòu)體的使用
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();
}
}
運行結(jié)果

結(jié)構(gòu)體特點
結(jié)構(gòu)體可以有方法,字段,索引器,屬性,操作符方法和事件
結(jié)構(gòu)體可以有定義的構(gòu)造函數(shù),但不能是析構(gòu)函數(shù)。但是不能為結(jié)構(gòu)定義默認構(gòu)造函數(shù)。默認構(gòu)造函數(shù)是自動定義的,不能被更改
與類不同,結(jié)構(gòu)體不能繼承其他結(jié)構(gòu)體或類
結(jié)構(gòu)體不能用作其他結(jié)構(gòu)或類的基礎(chǔ)
結(jié)構(gòu)體可以實現(xiàn)一個或多個接口
結(jié)構(gòu)成員不能被指定為抽象,虛擬或受保護
當使用New運算符創(chuàng)建一個struct對象時,它將調(diào)用相應(yīng)的構(gòu)造函數(shù)。 與類不同,可以在不使用New運算符的情況下實例化結(jié)構(gòu)體
如果不使用New運算符,則字段保持未分配,并且在所有字段初始化之前不能使用對象
結(jié)構(gòu)體 VS 類
結(jié)構(gòu)體是值類型,存儲在棧上,類是引用類型,存儲在托管堆上,結(jié)構(gòu)體在聲明的時候就已經(jīng)為其分配棧上的內(nèi)存了,而類需要用 new為其分配堆上面的內(nèi)存
結(jié)構(gòu)體是隱式密封的,不能用 sealed 和 abstract 修飾,結(jié)構(gòu)體不能被繼承,類可以被繼承
結(jié)構(gòu)體中的實例字段只能聲明,不能賦值,而類沒有限制,結(jié)構(gòu)體只聲明沒有用 new 進行初始化時,可以給他的實例字段賦值,而類不行
結(jié)構(gòu)體沒有析構(gòu)函數(shù),結(jié)構(gòu)體中的方法不能用 virtual 和 abstract 修飾,但是可以用 override 修飾,用來重寫父類的方法
結(jié)構(gòu)體不能顯示給出默認構(gòu)造函數(shù)(無參數(shù)的構(gòu)造),無論有沒有自定義構(gòu)造,默認構(gòu)造都隱式存在,而類中有自定義構(gòu)造函數(shù)時,默認構(gòu)造會被隱藏,要想調(diào)用默認構(gòu)造,必須顯示給出默認構(gòu)造
結(jié)構(gòu)體的自定義構(gòu)造函數(shù)必須初始化所有的實例字段和沒有初始化的非靜態(tài)屬性,類沒有限制
結(jié)構(gòu)與類的選擇
堆棧的空間有限,對于大量的邏輯的對象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些
結(jié)構(gòu)表示如點、矩形和顏色這樣的輕量對象,例如,如果聲明一個含有 1000 個點對象的數(shù)組,則將為引用每個對象分配附加的內(nèi)存。在此情況下,結(jié)構(gòu)的成本較低
在表現(xiàn)抽象和多級別的對象層次時,類是最好的選擇
大多數(shù)情況下該類型只是一些數(shù)據(jù)時,結(jié)構(gòu)時最佳的選擇體的使用
以上就是關(guān)于C#結(jié)構(gòu)體 你需要知道的的詳細內(nèi)容,更多關(guān)于c#結(jié)構(gòu)體的資料請關(guān)注腳本之家其它相關(guān)文章!
- C#中的只讀結(jié)構(gòu)體(readonly struct)詳解
- C# 中 System.Index 結(jié)構(gòu)體和 Hat 運算符(^)的使用示例
- 淺析C# 結(jié)構(gòu)體struct
- 快速了解c# 結(jié)構(gòu)體
- 詳解C# 結(jié)構(gòu)體
- C# 7.2中結(jié)構(gòu)體性能問題的解決方案
- C#如何利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析
- 基于C#調(diào)用c++Dll結(jié)構(gòu)體數(shù)組指針的問題詳解
- C#中結(jié)構(gòu)體定義并轉(zhuǎn)換字節(jié)數(shù)組詳解
- c# 如何使用結(jié)構(gòu)體實現(xiàn)共用體
相關(guān)文章
C# 9 新特性——record的相關(guān)總結(jié)
這篇文章主要介紹了C# 9 新特性——record的相關(guān)總結(jié),幫助大家更好的理解和學習使用c# 9的新特性,感興趣的朋友可以了解下2021-02-02
List轉(zhuǎn)換成DataSet實現(xiàn)代碼
怎樣把List轉(zhuǎn)換成DataSet本人很是疑惑,于是搜集整理一番,需要的朋友可以參考下2012-12-12
如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解
這篇文章主要給大家介紹了關(guān)于如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2018-05-05
C# string轉(zhuǎn)unicode字符的實現(xiàn)
本文主要介紹了C# string轉(zhuǎn)unicode字符的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02
c# 使用谷歌身份驗證GoogleAuthenticator的示例
這篇文章主要介紹了c# 使用谷歌身份驗證GoogleAuthenticator的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01

