類和結構的區別
目錄: ø
類和結構的示例比較 ø
類和結構的差別 ø
如何選擇使用類還是使用結構
一類和結構的示例比較
結構示例:
public struct person
}類示例:
public class testtime
}呼叫過程
public class test
}從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是
struct
還是class
的區別,而且使用時,定義
新的結構和定義新的類的方法也非常類似。
二類和結構的區別
1
、值型別和引用型別
結構:結構是值型別;
值型別在堆疊上分配位址,所有的基型別都是結構型別,例如:
int對應
system.int32
結構,string
對應system.string
結構,通過使用結構可以建立更多的值型別。
類:類是引用型別;
引用型別在堆上分配位址。
堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不適合處理大的邏輯複雜的物件。所以結構處理作為基型別對待的小物件,而類處理某個商業邏輯。
賦值操作,因為結構是值型別,所以結構之間的賦值可以建立新的結構,而類是引用型別,類之間的賦值只是複製引用。
說明:
u雖然結構與類的型別不一樣,可是他們的基型別都是物件(
object
),c#
中所有型別的基型別都是
object;
u雖然結構的初始化也使用了
new操作符可是結構物件依然分配在堆疊上而不是堆上; u
結構的宣告:
person myperson=new person() //
宣告結構
person myperson;
使用new
關鍵後建立結構,呼叫結構的建構函式,對所有字段進行初始化操作(每個字段根據宣告的型別得到預設值);
如果不使用
new,欄位將保持未賦值狀態,且物件不可用。必須初始化所有的資料成員,物件才可用;不能通過屬性和方法進行初始化,因為在初始化所有的資料成員之前,沒用乙個函式成員能被呼叫,所以,資料成員必須宣告為
public的。
注意:當結構體中有屬性時,必須使用
new來建立結構體變數
如:下面**會出錯,使用了未賦值的變數
p public struct person
set }
} class program
}正確**:
public struct person
set
}public person(int age)}
class program
}2
、繼承性
結構:不能從另外乙個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用
sealed
宣告,可是結構是隱式的
sealed。
類:完全可擴充套件的,除非顯示的宣告
sealed
,否則類可以繼承其他類和介面,自身也能被繼承。
說明:
雖然結構不能被繼承
可是結構能夠繼承介面,方法和類繼承介面一樣。
例如:結構實現介面
inte***ce iimage
struct picture : iimage
private int x, y, z;
// other struct members}
3
、內部結構
結構:
u沒有預設的建構函式,但是可以新增建構函式 u
沒有析構函式 u
沒有abstract
和sealed(
因為不能繼承)u
不能有protected
修飾符(
結構成員預設修飾符為私有,跟類相同)u
可以不使用
new初始化 u
在結構中初始化例項欄位是錯誤的
類:
u有預設的建構函式 u
有析構函式 u
可以使用
abstract
和sealedu有
protected
修飾符
u必須使用
new初始化 u
在類中可以初始化例項字段 三
如何選擇類還是結構
結構可以看作是輕量級的類,在效能上要好一點。 u
對於大量邏輯的物件,建立類要比建立結構好一些。 u
結構表示如點、矩形和顏色這樣的輕量物件,例如,如果宣告乙個含有
1000
個點物件的陣列,則將為引用每個物件分配附加的記憶體。在此情況下,結構的成本較低。 u
在表現抽象和多級別的物件層次時,類是最好的選擇。 u
大多數情況下該型別只是一些資料時,結構時最佳的選擇。
C 中類和結構的區別
二 類與結構的差別 1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,string 對應 system.string 結構 通過使用結構可以建立更多的值型別 堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不...
C 中結構和類的區別
一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是struct還是class的區別,而且使用時,定義新...
c 中 結構和類的區別
一 類與結構的差別 1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,通過使用結構可以建立更多的值型別 類是引用型別 引用型別在堆上分配位址 堆疊的執行效率要比堆的執行效率高 因為對於引用型別解引用以訪問它的值需涉...