class
struct
本質
繼承與system.object,是引用型別。
其實例分配在堆上。
其實例可以設為null。
作為引數時,按址方式傳遞。
可以宣告析構函式,因為其實例由垃圾**機制來確保記憶體**。
繼承自system.valuetype,是值型別。
其實例分配在棧上。(效能優勢)
其實例不可以設為null。
作為引數時,按值方式傳遞。
不可以宣告析構函式,因為使用完後立即自動解除記憶體分配。
建構函式
可以顯示宣告無引數的建構函式。
不需要在建構函式中初始化全部字段。
不可以顯示宣告無引數的建構函式,只能宣告有引數的建構函式。預設無參構造器只是簡單地把所有的值初始它的的0等價值。
建構函式必須初始化所有字段。
成員
可以對成員進行初始化。
不可以對成員進行初始化。
例項化
使用new關鍵字。
可以不使用new關鍵字。對於struct如果是例項無參的時就可以無new了;但如果是有參的建構函式生成時,就要用new了。如果不以new來例項化struct,則其所有的字段將處於未分配狀態,直到所有字段完成初始化,否則引用未賦值的字段會導致編譯錯誤。
繼承
可以繼承類和介面。(擴充套件優勢)
不能從類繼承,也不能作為類的基類,但是可以繼承介面。
抽象
可以是抽象類,並可宣告抽象函式。
不支援抽象。
過載
可以宣告protected成員、virtual成員、sealed成員和override成員。
只可以過載system.object的3個虛方法,equals()、tostring()、gethashtable()。
職能
是行為的封裝,用來表述物件。
是資料的封裝,用於儲存資料。
1struct
fenshu212
13//
14//
fenshu(int fm)
15//
1819
//need to mark the constructor as public (or internal).
20internal fenshu(int
fm)2125}
2627
class
program28/
", fs.fenzi, fs.fenmu);
3536
fenshu f;
37 f.fenzi = 1
;38 f.fenmu = 2
;39 console.writeline("/"
, f.fenzi, f.fenmu);
4041 fenshu s = new fenshu(2
);42 console.writeline("/"
, s.fenzi, s.fenmu);43}
44 }
reference:
addition:
列舉是值型別而system.enum卻是引用型別的原因
C 中struct和class的差別
在c 中,struct和class除了預設訪問控制級別不一樣,其它別無二致,具體怎麼用,純屬於個人習慣。另 在stroustrup c 發明者 的原作中 他自己說的原句是 按照定義,乙個struct就是乙個類,而只是完全公開的類 所以 struct s 等價於class s public 也就是說,...
c 中struct和class的區別
有這麼幾點不同 1.struct 是值型別,class是物件型別 2.struct 不能被繼承,class可以被繼承 3.struct 預設的訪問許可權是public,而class預設的訪問許可權是private.4.struct不能由程式設計師申明建構函式,即使是預設 不帶引數 的建構函式,同樣也...
C 中 struct 和 class 的區別
從語法上,class和struct做型別定義時只有兩點區別 一 預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理 二 成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。...