c# 中結構型別和類型別在語法上非常相似,他們都是一種資料結構,都可以包括資料成員和方法成員。
結構和類的區別:
1、結構是值型別,它在棧中分配空間;而類是引用型別,它在堆中分配空間,棧中儲存的只是引用。
2、結構型別直接儲存成員資料,讓其他類的資料位於堆中,位於棧中的變數儲存的是指向堆中資料物件的引用。
c# 中的簡單型別,如int、double、bool等都是結構型別。如果需要的話,甚至可以使用結構型別結合運算子運算過載,再為 c# 語言建立出一種新的值型別來。
由於結構是值型別,並且直接儲存資料,因此在乙個物件的主要成員為資料且資料量不大的情況下,使用結構會帶來更好的效能。
因為結構是值型別,因此在為結構分配記憶體,或者當結構超出了作用域被刪除時,效能會非常好,因為他們將內聯或者儲存在堆疊中。當把乙個結構型別的變數賦值給另乙個結構時,對效能的影響取決於結構的大小,如果結構的資料成員非常多而且複雜,就會造成損失,接下來使用一段**來說明這個問題。
結構和類的適用場合分析:
1、當堆疊的空間很有限,且有大量的邏輯物件時,建立類要比建立結構好一些;
2、對於點、矩形和顏色這樣的輕量物件,假如要宣告乙個含有許多個顏色物件的陣列,則clr需要為每個物件分配記憶體,在這種情況下,使用結構的成本較低;
3、在表現抽象和多級別的物件層次時,類是最好的選擇,因為結構不支援繼承。
4、大多數情況下,目標型別只是含有一些資料,或者以資料為主。
c 中結構體和類的區別
1.c的結構體和c 結構體的區別 1.1 c的結構體內不允許有函式存在,c 允許有內部成員函式,且允許該函式是虛函式。所以c的結構體是沒有建構函式 析構函式 和this指標的。1.2 c的結構體對內部成員變數的訪問許可權只能是public,而c 允許public,protected,private三...
C 中類和結構體的區別
c 結構體內部成員變數及成員函式預設的訪問級別是public,而c 類的內部成員變數及成員函式的預設訪問級別是private。c 結構體的繼承預設是public,而c 類的繼承預設是private,所以類在繼承的時候需要public 結構體 沒有預設的建構函式,但是可以新增建構函式 沒有析構函式 沒...
C 中結構體和類的區別
結構體和類同樣能夠定義字段,方法和建構函式,都能例項化物件,這樣看來結構體和類的功能好像是一樣的了,但是他們在資料的儲存上是不一樣的 這兩種資料型別的本質區別主要是各自指向的記憶體位置不同。傳遞類的時候,主要表現為是否同時改變了源物件。1.結構體是值型別,類是引用型別 雖然結構體的初始化也使用了ne...