C#指代的功能介紹
在向大家詳細介紹C#指代之前,首先讓大家了解下C#對象索引機制,然后全面介紹C#指代。
C#對象索引機制(Indexer)
C#中引入了對象索引機制。說得明白點,對象索引其實就是對象數(shù)組。這里和上一節(jié)中的屬性聯(lián)系起來講一下,屬性需要隱藏Get和Set方法,而在索引機制中,各個對象的Get或者Set方法是暴露出來的。比如下面的例子就比較清楚地說明了這一點。
- public class Skyscraper
- {
- Story[] stories;
- public Story this [int index] {
- get {
- return stories [index];
- }
- set {
- if (value != null) {
- stories [index] = value;
- }
- }
- }
- ...
- }
C#指代(Delegate)
C#指代這個玩意很特別,它有點象指針,但又不完全是,不過大家還是可以把它理解為一種類型安全的、面向?qū)ο蟮闹羔?。(什么是類型安全和面向?qū)ο缶筒挥弥v了吧?)順便提一句,有很多書上把Delegate翻譯成代理,我覺得這樣翻不夠確切,翻譯成“指代”更恰當些,道理上吻合,并且還符合它的本來意思——微軟本來就是用Delegate來“取代指針”,所以叫“指代”,呵呵。
說起指代,也許至今Sun還會對它憤憤不已,為什么呢?因為在Sun的標準Java中是沒有這個東西的,它是微軟99年發(fā)布的MSVJ++6添加的 “新特性”。為此,兩家公司吵得不亦樂乎,并且還專門在網(wǎng)上寫了大量文章互相攻擊,有興趣的朋友可以去看看(只有英文版)。
◆http://www.Javasoft.com/docs/white/delegates.html
◆http://msdn.microsoft.com/visualj/technical/articles/delegates/truth.asp
話歸正傳,指代有什么特點呢?一個明顯的特點就是它具有了指針的行為,就好象從Java又倒回到了C++。C#指代完成的功能大概和C++里面的指針,以及Java中的接口相當。但是,指代比起C++的“正宗指針”來又要高明一些,因為它可以同時擁有多個方法,相當于C++里面的指針能同時指向多個函數(shù),并且是類型安全的,這一點體現(xiàn)了它的“對象”特性;而比起Java的接口來,指代高明的地方在于它能可以不經(jīng)過內(nèi)部類就調(diào)用函數(shù),或者用少量代碼就能調(diào)用多種函數(shù),這一點體現(xiàn)了它的“指針”特性。
【編輯推薦】


2009-09-02 17:44:41




