關於結構和類

1)class 是引用類型,繼承自System.Object;stuce是值類型,繼承自System.ValueType類,因此不具多態性。但是注意,System.ValueType是個引用類型。 2)從職能觀點來看,class表現爲行爲;而stuct常用於存儲數據。 3)class支持繼承,可以繼承自類和接口;而struct沒有繼承性,struct不能從class繼承,也不能作爲class的基類,但struct支持接口繼承。 4)classs可以聲明無參構造函數,可以聲明析構函數;而struct只能聲明帶參數構造函數,且不能聲明析構函數。因此,struct沒有自定義的默認無參構造函數,默認無參構造器只是簡單地把所有的值初始它的的0等價值。 5)實例化時,class要使用new關鍵字;而struct可以不使用new 關鍵字,對於struct如果是實例無參的時就可以無new了;但如果是有參的構造函數生成時,就要用new了。如果不以new來實例化struct,則其所有的字段將處於未分配狀態,直到所有字段完成初始化,否則引用未賦值的字段會導致編譯錯誤。

6)class可以是抽象類(abstract),可以聲明抽象函數;而struct爲抽象也不能聲明抽象函數。 7)class可以聲明protected成員,virtual成員,sealed成員和override成員;而struct不可以但是值得注意的是,struct可以重載System.Object的3個虛方法,(Equals(),Tostring(),GetHashTable()) 8)class 的對象複製分爲淺拷貝和深拷貝,必須經過特別的方法來完成複製;而struct創建的對象複製簡單,可直接以等號連接即可。 9)class實例由垃圾回收機制來保證內存的回收處理;而struct變量使用完後立即自動解除內存分配。 10)作爲參數傳遞時,class變量以按址方式傳遞;而struct變量是以按值方式傳遞的。

我們可以簡單的理解,class是一個可以動的機器,有行爲,有多態;而struct就是一個零件箱,組合了不同結構零件。 當然,使用class基本可以替代struct的任何場合,可以說在面向對象的編程裏,橫行天下。class後來居上。但有些地認識不這是有用的着struct。

a)實現一個訂用於存儲數據的結構時,可以考慮struct。 b)struct變量佔用堆棧空間,因此只適用數據量相對小的場合。 c)結構數組具有更高的效率。 d)提供某些和非託管代碼通信的兼容性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章