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 從上面的例子中我們可以看到,類的宣告和結構的...