程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#與JAVA之比較(3)

C#與JAVA之比較(3)

編輯:關於C語言

4、對象索引機制(Indexer)

C#中引入了對象索引機制。說得明白點,對象索引其實就是對象數組。這裡和上一節中的屬性聯系起來講一下,屬性需要隱藏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;
    }
   }
  }
...
}
Skyscraper empireState = new Skyscraper (...);
empireState [102] = new Story ("The Top One", ...);

呵呵,有了這種特性,我們就再不用怕課堂上老師叫我們寫對象數組這種程序了。

. 指代(Delegate)

指代這個玩意很特別,它有點象指針,但又不完全是,不過大家還是可以把它理解為一種類型安全的、面向對象的指針。(什麼是類型安全和面向對象就不用講了吧?)順便提一句,有很多書上把Delegate翻譯成代理,我覺得這樣翻不夠確切,翻譯成“指代”更恰當些,道理上吻合,並且還符合它的本來意思——微軟本來就是用Delegate來“取代指針”,所以叫“指代”,呵呵。

說起指代,也許至今Sun還會對它憤憤不已,為什麼呢?因為在Sun的標准Java中是沒有這個東西的,它是微軟99年發布的MSVJ++6添加的“新特性”。為此,兩家公司吵得不亦樂乎,並且還專門在網上寫了大量文章互相攻擊,有興趣的朋友可以去看看(只有英文版)。

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++裡面的指針能同時指向多個函數,並且是類型安全的,這一點體現了它的“對象”特性;而比起Java的接口來,指代高明的地方在於它能可以不經過內部類就調用函數,或者用少量代碼就能調用多種函數,這一點體現了它的“指針”特性。呵呵,很有“波粒二象性”的味道吧?指代最重要的應用在於對於事件的處理,下一節我們將重點介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved