我們不關心物件內部是怎麼實現的,我們關心的是他提供給我什麼介面,有什麼操作。從技術上來說,結構屬於值型別,而類屬於引用型別。結構不能指定繼承基類型別,類可以。不過結構和類都能實現介面。
一、應用場合
結構的應用場合:
一、自定義資料型別,資料成員是公開的,提供工具函式。
二、抽象的資料型別,資料成員是密封的,提供相關的資料操作函式。
總之,都是圍繞資料作文章。
類的程式設計客棧應用場合:
一、提供一組類,形成乙個有機整體,形成乙個系統,類資料成員是密封的,只提供相互通訊的函式介面。
類主要通過不同的類組成乙個類間通訊的系統。而類自身是整個系統的一部分。
二、成員和可訪問性
作為抽象資料型別的工具,類和結構提供了豐富的封裝功能。
1.欄位定義資料成員,無封裝
2.屬性封裝欄位的訪問方式
3.函式提供可用操作
4.事件提供了處理訊息的模型
5.索引器封裝了資料集合
另外建構函式、析構函式負責初始化和清理垃圾(在c#中需要使用idispose模式)
對於成員,可以有三大類,1、類成員,所有例項共享;(static 修飾)2、物件公開成員;(publi程式設計客棧c 修飾)3、物件私有成員。其中公開成員是最重要的,私有成員屬於內部實現細節。
公開成員是物件的特徵,因為對於使用者來說,只能通過公開成員和物件進行互動。可以通過提取nxvvwpmnz公開成員,形成乙個獨立介面,用來隔離具體的實現。這樣,設計者便可程式設計客棧以提供不同的類實現給客戶。
三、泛型和介面
類和結構的共同點都是屬於實現,而介面屬於規範,客戶端應該避免直接接程式設計客棧觸具體的實現,否則客戶端就需要根據實現的變化而變化,這明顯是不經濟的。但是類和結構又有差別,類側重行為,因此和介面更加搭配;而結構側重資料,而介面是沒有資料的,並且介面屬於引用型別,當結構作為值型別轉化成介面,就會產生裝箱,會有效能問題。因此,介面一般不會配合結構來使用,而結構應該作為更加單純的資料單元,不應該新增太多功能性。如果需要設計功能豐富的元件,最好是基於類來實作。當結構作為資料單元,它要修改設計的餘地很少,因為資料單元的應用場合更多是被其他人修改,不具太多自主性。結論是結構自身便可以作為規範。
泛型是未完成的型別,因此提供了客戶端自定義型別的機會。泛型的每乙個例項,都共享相同或者類似的**,那麼客戶端需要泛型的理由是什麼?
c#是強型別的系統,就算邏輯上一樣,因為型別不同,在編譯器看來都是完全不同的**。當客戶端需要為不同型別採取相同的邏輯的時候,泛型就提供了乙個快捷的,越過強型別限制的渠道。比如有個int + int 和 float + float在我們人類看來幾乎是一摸一樣,但是強型別的編譯器要求你重複書寫**,泛型能做到t + t,然後讓客戶端用可支援+操作的引數生成任何型別。
從客戶端的角度,它不在乎實現是怎樣的,它在乎的是介面是怎樣的。泛型對客戶端的意義在於強化了介面,從提供特定型別的介面到提供滿足特定條件的一定範圍內的型別的新型介面。這就讓可用性大大增強。(按照實際應用情況,我們應該將泛型視為常態,單一型別的介面才是特殊態)。
本文位址:
C 結構體和類介紹
include stdafx.h include include using namespace std struct test 定義乙個名為test的結構體 void main movie 可以在宣告struct的時候宣告乙個struct例項,這個有啥意思呢?int main dates char...
C 類的介紹和使用
01,c 中的 struct 和c語言的區別 a c 中的struct 不僅可以宣告成員變數,還可以宣告成員函式 struct person b c 中宣告乙個 struct 物件 c 中就不用再寫成 struct person t man 了 person t man 在c語言中要寫成struct...
c 類和結構
類和結構都是用來建立物件 的模版。結構與類的區別 1.他們在記憶體中儲存方式,訪問方式 類是堆上的引用型別,而結構是儲存在棧上的值型別 2.都用new來宣告例項。不過結構的new並不是用來分配堆中的記憶體,並且可以不用new,只是呼叫相應的建構函式 用來初始化字段值。結構體的建構函式 3.結構不支援...