類或結構的聲明類似於藍圖,用於在運行時創建實例或對象。如果定義壹個名為Person的類或結構,則Person為類型名稱。如果聲明並初始化Person類型的變量p,則p稱為Person的對象或實例。可以創建同壹Person類型的多個實例,每個實例在其屬性和字段中具有不同的值。
類是壹種“引用類型”。創建類的對象時,對象賦值到的變量只保存對該內存的引用。將對象引用賦給新變量時,新變量引用的是原始對象。通過壹個變量做出的更改將反映在另壹個變量中,因為兩者引用同壹數據。
結構是壹種值類型。創建結構時,結構賦值到的變量保存該結構的實際數據。將結構賦給新變量時,將復制該結構。因此,新變量和原始變量包含同壹數據的兩個不同的副本。對壹個副本的更改不影響另壹個副本。
類通常用於對較為復雜的行為建模,或對要在創建類對象後進行修改的數據建模。結構最適合壹些小型數據結構,這些數據結構包含的數據以創建結構後不修改的數據為主。\\\\
結構與類***享大多數相同的語法,但結構比類受到的限制更多
在結構聲明中,除非字段被聲明為 const 或 static,否則無法初始化。
結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。
結構在賦值時進行復制。
將結構賦值給新變量時,將復制所有數據,並且對新副本所做的任何修改不會更改原始副本的數據。在使用值類型的集合(如 Dictionary)時,請務必記住這壹點。
結構是值類型,而類是引用類型。
與類不同,結構的實例化可以不使用new運算符。
結構可以聲明帶參數的構造函數。
壹個結構不能從另壹個結構或類繼承,而且不能作為壹個類的基。
所有結構都直接繼承自System.ValueType,後者繼承自System.Object。(其實就是值類型與引用類型的區別)
結構可以實現接口。
結構可用作可以為 null 的類型,因而可向其賦 null 值。
.NET BCL裏有哪些是類(結構),為什麽它們不是結構(類)?
BCL(Base Class Library)是Dot Net Framework下所有語言使用的類庫(有哪些類和結構,妳就隨便說吧,System名字空間的有多少啊~需要註意的是DateTime這玩意其實是壹個結構體。)為什麽他們不是結構(類)呢?這道題和下面的小問題其實是壹個問題那就是什麽時候定義結構什麽時候定義類,下面壹起回答
在自定義類型時,您如何選擇是類還是結構?
struct類型適於表示Point、Rectangle和Color等輕量對象。盡管使用自動實現的屬性將壹個點表示為類同樣方便,但在某些情況下使用結構更加有效。例如,如果聲明壹個 1000 個Point對象組成的數組,為了引用每個對象,則需分配更多內存;這種情況下,使用結構可以節約資源。因為 .NET Framework 包含壹個名為Point的對象,所以本示例中的結構命名為“CoOrds”。復數、坐標系中的點或字典中的“鍵-值”對都是結構的典型示例。
?除非滿足壹下所有條件,否則不要定義成值類型(結構體)
第壹,類型具有基元類型的行為。類型簡單,其中沒有成員會修改類型的任何實例字段。
第二,類型不需要從其他任何類型繼承。
第三,類型不會派生出其他任何類型。
除了滿足以上全部條件,還必須滿足以下條件中的壹個。
第壹,類型的實例較小(約是16字節或者更小)。
第二,類型實例較大,但不作為方法的實參傳遞,也不通過方法返回。