欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#結(jié)構(gòu)和類的相關(guān)介紹

 更新時(shí)間:2012年12月04日 14:54:55   作者:  
結(jié)構(gòu)和類的共同點(diǎn)都是屬于抽象數(shù)據(jù)類型,包含數(shù)據(jù)和數(shù)據(jù)的操作。不同點(diǎn)在于結(jié)構(gòu)偏重于數(shù)據(jù)語(yǔ)意,而類偏重於行為語(yǔ)意。

我們不關(guān)心對(duì)象內(nèi)部是怎么實(shí)現(xiàn)的,我們關(guān)心的是他提供給我什么接口,有什么操作。從技術(shù)上來(lái)說(shuō),結(jié)構(gòu)屬于值類型,而類屬于引用類型。結(jié)構(gòu)不能指定繼承基類類型,類可以。不過(guò)結(jié)構(gòu)和類都能實(shí)現(xiàn)接口。
一、應(yīng)用場(chǎng)合
結(jié)構(gòu)的應(yīng)用場(chǎng)合:

一、自定義數(shù)據(jù)類型,數(shù)據(jù)成員是公開(kāi)的,提供工具函數(shù)。

二、抽象的數(shù)據(jù)類型,數(shù)據(jù)成員是密封的,提供相關(guān)的數(shù)據(jù)操作函數(shù)。

總之,都是圍繞數(shù)據(jù)作文章。

類的應(yīng)用場(chǎng)合:

一、提供一組類,形成一個(gè)有機(jī)整體,形成一個(gè)系統(tǒng),類數(shù)據(jù)成員是密封的,只提供相互通信的函數(shù)接口。

類主要通過(guò)不同的類組成一個(gè)類間通信的系統(tǒng)。而類自身是整個(gè)系統(tǒng)的一部分。

二、成員和可訪問(wèn)性
作為抽象數(shù)據(jù)類型的工具,類和結(jié)構(gòu)提供了豐富的封裝功能。

1.字段定義數(shù)據(jù)成員,無(wú)封裝

2.屬性封裝字段的訪問(wèn)方式

3.函數(shù)提供可用操作

4.事件提供了處理消息的模型

5.索引器封裝了數(shù)據(jù)集合

另外

構(gòu)造函數(shù)、析構(gòu)函數(shù)負(fù)責(zé)初始化和清理垃圾(在c#中需要使用IDispose模式)

對(duì)于成員,可以有三大類,1、類成員,所有實(shí)例共享;(static 修飾)2、對(duì)象公開(kāi)成員;(public 修飾)3、對(duì)象私有成員。其中公開(kāi)成員是最重要的,私有成員屬于內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。

公開(kāi)成員是對(duì)象的特征,因?yàn)閷?duì)于使用者來(lái)說(shuō),只能通過(guò)公開(kāi)成員和對(duì)象進(jìn)行互動(dòng)??梢酝ㄟ^(guò)提取公開(kāi)成員,形成一個(gè)獨(dú)立接口,用來(lái)隔離具體的實(shí)現(xiàn)。這樣,設(shè)計(jì)者便可以提供不同的類實(shí)現(xiàn)給客戶。

三、泛型和接口
類和結(jié)構(gòu)的共同點(diǎn)都是屬于實(shí)現(xiàn),而接口屬于規(guī)范,客戶端應(yīng)該避免直接接觸具體的實(shí)現(xiàn),否則客戶端就需要根據(jù)實(shí)現(xiàn)的變化而變化,這明顯是不經(jīng)濟(jì)的。但是類和結(jié)構(gòu)又有差別,類側(cè)重行為,因此和接口更加搭配;而結(jié)構(gòu)側(cè)重?cái)?shù)據(jù),而接口是沒(méi)有數(shù)據(jù)的,并且接口屬于引用類型,當(dāng)結(jié)構(gòu)作為值類型轉(zhuǎn)化成接口,就會(huì)產(chǎn)生裝箱,會(huì)有性能問(wèn)題。因此,接口一般不會(huì)配合結(jié)構(gòu)來(lái)使用,而結(jié)構(gòu)應(yīng)該作為更加單純的數(shù)據(jù)單元,不應(yīng)該添加太多功能性。如果需要設(shè)計(jì)功能豐富的組件,最好是基于類來(lái)實(shí)作。當(dāng)結(jié)構(gòu)作為數(shù)據(jù)單元,它要修改設(shè)計(jì)的余地很少,因?yàn)閿?shù)據(jù)單元的應(yīng)用場(chǎng)合更多是被其他人修改,不具太多自主性。結(jié)論是結(jié)構(gòu)自身便可以作為規(guī)范。

泛型是未完成的類型,因此提供了客戶端自定義類型的機(jī)會(huì)。泛型的每一個(gè)實(shí)例,都共享相同或者類似的代碼,那么客戶端需要泛型的理由是什么?

c#是強(qiáng)類型的系統(tǒng),就算邏輯上一樣,因?yàn)轭愋筒煌诰幾g器看來(lái)都是完全不同的代碼。當(dāng)客戶端需要為不同類型采取相同的邏輯的時(shí)候,泛型就提供了一個(gè)快捷的,越過(guò)強(qiáng)類型限制的渠道。比如有個(gè)int + int 和 float + float在我們?nèi)祟惪磥?lái)幾乎是一摸一樣,但是強(qiáng)類型的編譯器要求你重復(fù)書寫代碼,泛型能做到T + T,然后讓客戶端用可支持+操作的參數(shù)生成任何類型。

從客戶端的角度,它不在乎實(shí)現(xiàn)是怎樣的,它在乎的是接口是怎樣的。泛型對(duì)客戶端的意義在于強(qiáng)化了接口,從提供特定類型的接口到提供滿足特定條件的一定范圍內(nèi)的類型的新型接口。這就讓可用性大大增強(qiáng)。(按照實(shí)際應(yīng)用情況,我們應(yīng)該將泛型視為常態(tài),單一類型的接口才是特殊態(tài))。

相關(guān)文章

最新評(píng)論