C 中結構與類的區別

2022-02-13 20:38:43 字數 1120 閱讀 9253

c# 中結構與類的區別

目錄類與結構的示例比較

結構示例

public struct person

}類示例

public class testtime

}呼叫過程

public class test

}從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別是什麼呢?

類與結構的差別

值型別與引用型別

結構結構是值型別,值型別在堆疊上分配位址,所有的基型別都是結構型別,例如:int 對應system.int32 結構,string 對應 system.string 結構 ,通過使用結構可以建立更多的值型別。

類類是引用型別,引用型別在堆上分配位址。

堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不適合處理大的邏輯複雜的物件。所以結構處理作為基型別對待的小物件,而類處理某個商業邏輯。

因為結構是值型別所以結構之間的賦值可以建立新的結構,而類是引用型別,類之間的賦值只是複製引用。

說明:繼承性

結構不能從另外乙個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用 sealed 宣告,可是結構是隱式的 sealed。

類完全可擴充套件的,除非顯示的宣告 sealed,否則類可以繼承其他類和介面,自身也能被繼承。

說明:內部結構結構類

如何選擇結構還是類

討論了結構與類的相同之處和差別之後,下面討論如何選擇使用結構還是類:

----

網友在 csdn 上的回答:

結構可以看作是輕量級的類,在效能上要好一點。

相同之處:

不同之處:

不能繼承乙個結構體(所以在呼叫結構體的方法時不需要查詢 vtable: 虛函式繼承表)

我們不能宣告建構函式為空的結構體(不曉得為啥非得要這麼設計)

結構體的建構函式內必須初始化所有變數(不曉得為啥非得要這麼設計)

結構體的字段不能有預設值(預設都是二進位制意義上的零值),但是可以在建構函式內改變「預設值」

.....

按照msdn上的意思,實際上適合用 struct 的場合很小,結構使用指南:

c 中結構與類的區別

類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct ...

c 中結構與類的區別

類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct ...

C 中結構與類的區別

c 中結構與類的區別目錄 類與結構的例項比較 類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的...