亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

C#與Java的比較(二)

2024-07-21 02:20:22
字體:
來源:轉載
供稿:網友
              c#與java的比較(轉二)


5. 指代(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的接口來,指代高明的地方在于它能可以不經過內部類就調用函數,或者用少量代碼就能調用多種函數,這一點體現了它的“指針”特性。呵呵,很有“波粒二象性”的味道吧?指代最重要的應用在于對于事件的處理,下一節我們將重點介紹。

6、事件(event)

  c#對事件是直接支持的(這個特點也是msvj所具有的)。當前很多主流程序語言處理事件的方式各不相同,delphi采用的是函數指針(這在delphi中的術語是“closure”)、java用改編類來實現、vc用windowsapi的消息系統,而c#則直接使用delegate和event關鍵字來解決這個問題。下面讓我們來看一個例子,例子中會給大家舉出聲明、調用和處理事件的全過程。


//首先是指代的聲明,它定義了喚醒某個函數的事件信號
public delegate void scorechangeeventhandler (int newscore, ref bool cancel);

//定義一個產生事件的類 > public class game
{
 // 注意這里使用了event關鍵字
 public event scorechangeeventhandler scorechange;
  int score;
  // score 屬性
  public int score
  {
   get {
    return score;
   }
   set {
    if (score != value)
    {
     bool cancel = false;
     scorechange (value, ref cancel);
     if (! cancel)
     score = value;
    }
  }
}


// 處理事件的類
public class referee
{
 public referee (game game)
 {
  // 裁判負責調整比賽中的分數變化
  game.scorechange += new scorechangeeventhandler (game_scorechange);
 }

 // 注意這里的函數是怎樣和scorechangeeventhandler的信號對上號的
 private void game_scorechange (int newscore, ref bool cancel)
 {
  if (newscore $#@60; 100)
   system.console.writeline ("good score");
  else
  {
   cancel = true;
   system.console.writeline ("no score can be that high!");
  }
 }
}

// 主函數類,用于測試上述特性
public class gametest
{
 public static void main ()
 {
  game game = new game ();
  referee referee = new referee (game);
  game.score = 70;
  game.score = 110;
 }
}

  在主函數中,我們創建了一個game對象和一個裁判對象,然后我們通過改變比賽分數,來觀察裁判對此會有什么響應。

  請注意,我們的這個系統中,game對象是感覺不到裁判對象的存在的,game對象在這里只負責產生事件,至于有誰會來傾聽這個事件,并為之作出反應,game對象是不作任何表態的。

  我們注意到,在裁判類的referee函數中,game.scorechange后面使用了+=和-=操作符,這是什么意思呢?回到我們定義scorechange的地方,可以發現scorechange是用event關鍵字修飾的,那么這里的意思就很明白了:scorechange是一個事件,而事件被觸發后需要相應的事件處理機制,+=/-=就是為這個事件增加/移除相對應的事件處理程序,而且,并不是一個事件只能對應一個處理程序,我們還可以用這兩個操作符為同一事件增加/移除數個事件處理程序。怎么樣?很方便吧!

  在實際應用中,和我們上面講的(競賽-裁判)機制很相近的系統就是圖形用戶界面系統了。game對象可以看作是圖形界面上的小零件,而得分事件就相當于用戶輸入事件,而裁判就相當于相應的應用程序,用于處理用戶輸入。

  指代機制的首次亮相是在msvj里,它是由anders hejlsberg發明的,現在又用到了c#中。指代用在java語言中的后果,則直接導致了微軟和sun之間對類和指針的關系產生了大量的爭論和探討。有意思的是,java的發明者james gosling非常幽默地稱呼指代的發明者anders hejlsberg為“‘函數指針’先生”,因為anders hejlsberg總是想方設法地把指針變相地往各種語言中放;不過有人在看了java中大量地使用了各種類后,也戲稱java的發明者james gosling為“‘全都是類’先生”,真是其中滋味,盡在不言中啊。 ,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品永久免费观看| 高清亚洲成在人网站天堂| 午夜欧美大片免费观看| 亚洲wwwav| 精品成人69xx.xyz| 九九热这里只有精品6| 国产精品免费一区| 久久免费国产精品1| 午夜精品福利电影| 国产精品尤物福利片在线观看| 91伊人影院在线播放| 在线观看视频亚洲| 91精品久久久久久久久久久久久久| 中文字幕亚洲二区| 国产欧美一区二区三区久久| 91高清视频免费观看| 亚洲国产天堂久久国产91| 国产精品电影网| 成人免费淫片aa视频免费| 日本久久亚洲电影| 国产精品99蜜臀久久不卡二区| 精品人伦一区二区三区蜜桃免费| 欧美怡春院一区二区三区| 亚洲国产天堂网精品网站| 亚洲天堂一区二区三区| 亚洲精品有码在线| 日韩欧美在线一区| 日韩少妇与小伙激情| 久久精品视频播放| 日韩毛片在线观看| 欧美日韩中文字幕在线视频| 国产成人久久精品| 国产91露脸中文字幕在线| 国产亚洲美女久久| 91国语精品自产拍在线观看性色| 日韩欧美精品中文字幕| 国产69精品久久久久9| 亚洲欧美一区二区激情| 亚洲国产精品久久久久久| 亚洲女人天堂色在线7777| 成人写真视频福利网| 91视频-88av| 一区二区欧美日韩视频| 亚洲电影免费观看高清| 国产亚洲激情视频在线| 91禁外国网站| 久久久久久亚洲精品不卡| 欧美成人全部免费| 国产拍精品一二三| 欧美主播福利视频| 国产免费观看久久黄| 国产精品久久一区主播| 欧美国产精品va在线观看| 亚洲国产另类 国产精品国产免费| 亚洲一区第一页| 秋霞午夜一区二区| 欧美成人剧情片在线观看| 日韩欧美中文字幕在线播放| 91tv亚洲精品香蕉国产一区7ujn| 亚洲精品电影在线观看| 久久久久久久国产精品视频| 九九热这里只有在线精品视| 91成人天堂久久成人| 日韩在线观看高清| 一本色道久久综合亚洲精品小说| 国产91精品久久久久| 国产一区二区在线免费| 久久精品国产免费观看| 亚洲精品丝袜日韩| 欧美猛少妇色xxxxx| 久久99热精品这里久久精品| 国产精品露脸自拍| 亚洲一级黄色av| 亚洲一区亚洲二区| 日韩欧亚中文在线| 亚洲专区中文字幕| 日韩中文字幕在线视频播放| 成人女保姆的销魂服务| 亚洲码在线观看| 国产剧情久久久久久| 久久久久久18| 日韩精品在线私人| 日韩中文字幕精品| 欧美激情在线一区| 国产精品一区二区久久| 国产v综合ⅴ日韩v欧美大片| 亚洲欧美国产日韩中文字幕| 国产91成人在在线播放| 欧美性jizz18性欧美| 亚洲午夜女主播在线直播| 亚洲第一区中文字幕| 亚洲美女在线观看| 亚洲欧美色婷婷| 亚洲电影免费观看高清完整版在线观看| 欧美精品中文字幕一区| 国产在线98福利播放视频| 精品国产一区二区三区久久| 成人在线一区二区| 精品亚洲一区二区三区在线观看| 欧美亚洲在线播放| 在线电影欧美日韩一区二区私密| 精品亚洲永久免费精品| 欧美激情精品久久久久久黑人| 欧美在线视频a| 亚洲第一av在线| 亚洲成人激情在线观看| 亚洲高清福利视频| 亚洲淫片在线视频| 韩剧1988免费观看全集| 热久久美女精品天天吊色| 日韩电影免费观看中文字幕| 色偷偷亚洲男人天堂| 欧美亚洲国产成人精品| 亚洲爱爱爱爱爱| 国产精品久久久久久婷婷天堂| 国产91色在线|免| 欧美成人免费在线视频| 久久中文精品视频| 91欧美视频网站| 久久久精品在线| 久久久成人的性感天堂| 日本在线观看天堂男亚洲| 操人视频在线观看欧美| 欧美午夜精品久久久久久久| 亚洲国产另类久久精品| 一区二区三区久久精品| 国产午夜精品一区二区三区| 91免费电影网站| 国产性色av一区二区| 色老头一区二区三区在线观看| 久久久精品影院| 岛国视频午夜一区免费在线观看| 欧美黑人国产人伦爽爽爽| 欧美日韩国产麻豆| 国产亚洲免费的视频看| 国产精品视频公开费视频| 91中文字幕在线| 国产精品91视频| 日本久久亚洲电影| 久久久国产成人精品| 日韩av一区二区在线观看| 国产精品人成电影| 成人写真福利网| 福利二区91精品bt7086| 欧美日韩激情视频8区| 国产午夜精品全部视频在线播放| 91在线视频免费| 国产精品www色诱视频| 不卡中文字幕av| 国产精品美乳在线观看| 亚洲国产欧美一区二区丝袜黑人| 九九热精品视频国产| 欧美成年人在线观看| 日韩精品在线第一页| 中文字幕成人精品久久不卡| 亚洲最大福利视频网| 亚洲精品国产综合久久| 日韩美女av在线免费观看| 国产精品免费久久久久久| 一本色道久久综合亚洲精品小说| 欧美日韩亚洲91| 色999日韩欧美国产| 日韩av黄色在线观看| 国产日韩精品在线播放|