亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c#、java之比較.txt

?? 優(yōu)秀的JAVA學習文檔
?? TXT
字號:
作者:lindows
日期:2001-2-22 16:52:44
  很多人說C#是微軟用來和Java抗衡的武器,因為二者在很大程度上有著驚人的相似,盡管如此,兩者不同的地方也很多,所謂“于細微處見差異”。那么兩者的相似和區(qū)別都在什么地方呢?我們從今天開始,會從各個角度來對比C#和Java的特點,希望能對正在學習、使用C#的朋友有所幫助。

1、C#和.NET平臺的概貌

  2000年6月,微軟發(fā)布C#語言和.NET平臺。C#語言是一種強類型的,面向對象的語言,它具有語法簡單、表達力強的特點,而.NET平臺則是構成微軟的“.NET計劃”的基石。

  .NET平臺的核心包括兩方面,一方面就是著名的通用語言運行機(Common Language Runtime),雖然這個名詞起得晦澀了點,不過大家可以拿它和Java的虛擬機來作比較,二者完成的任務大致相同;另一方面就是一大堆通用函數庫,這些庫函數可以被多種語言調用,并且通過編譯都產生一種共同的中間語言(Intermediate Language),這種語言也可以拿Java的字節(jié)碼來類比,雖然完成的方式有些不一樣。

2、C#和Java

  下面簡單地把C#和Java的相似處列出來,雖然在這里我們重點討論的是C#和Java的不同點,但是了解一下二者的相同之處也是很有必要的。

  二者都編譯成跨平臺的、跨語言的代碼,并且代碼只能在一個受控制的環(huán)境中運行

  自動回收垃圾內存,并且消除了指針(在C#中可以使用指針,不過必須注明unsafe關鍵字)

  都不需要頭文件,所有的代碼都被“包(package)”限制在某個范圍內,并且因為沒有頭文件,所以消除了類定義的循環(huán)依賴

  所有的類都是從對象派生出來,并且必須使用New關鍵字分配內存

  用對象加鎖的方式來支持多線程

  都具有接口(interface)的概念

內部類

  繼承類的時候不會以某種特定的訪問權限來繼承;

  沒有全局函數或者常量,一切必須屬于類;

  數組或者字符串都自帶長度計算和邊界檢查;

  只使用“.”操作符,沒有“->”和“::”;

  “null”、“boolean”和“bool”成為了關鍵字;

  任何變量均在使用前進行初始化;

  不能使用整數來返回到if條件語句中,必須使用布爾值;

  “Try”模塊后可以有“finally” ;

3. 屬性(Property)

  屬性的概念對大家來說應該是很熟悉的,類成員函數可以自由地訪問本類中的任何屬性成員。不過若要從一個類中去訪問另一個類中的屬性,那就比較麻煩了,所以很多時候我們使用Getxxx和Setxxx方法,這樣看起來顯得極不自然,比如用Java或者C++,代碼是這樣的:

  foo.setSize (getSize () + 1);
  label.getFont().setBold (true);

  但是,在C#中,這樣的方法被“屬性化”了。同樣的代碼,在C#就變成了:

  foo.size++;
  label.font.bold = true;

  可以看出來,C#顯然更容易閱讀和理解。我們從這個“屬性方法”的子程序代碼中,也可以看到類似情況:

Java/C++:

public int getSize()
{
  return size;
}

public void setSize (int value)
{
  size = value;
}

C#:
public int Size
{
 get{return size;}
 set{size = value;}
}

  為了區(qū)分這種屬性化的方法和類的屬性成員,在C#中把屬性成員稱作“域(field)”,而“屬性”則成為這種“屬性化的方法”專用的名詞。順便說一句,其實這樣的屬性化方法在VB和DELPHI中是經常碰到的,在VB中它也就叫屬性。

  另外,在C#中Get和Set必須成對出現,一種屬性不能只有Get而沒有Set(在Java和C++中就可以只有Get或者只有Set),C#中這樣做的好處在于便于維護,假如要對某種屬性進行修改,就會同時注意Get和Set方法,同時修改,不會改了這個忘了那個。

4、對象索引機制(Indexer)

  C#中引入了對象索引機制。說得明白點,對象索引其實就是對象數組。這里和上一節(jié)中的屬性聯系起來講一下,屬性需要隱藏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", ...);

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

  說起指代,也許至今Sun還會對它憤憤不已,為什么呢?因為在Sun的標準Java中是沒有這個東西的,它是微軟99年發(fā)布的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的接口來,指代高明的地方在于它能可以不經過內部類就調用函數,或者用少量代碼就能調用多種函數,這一點體現了它的“指針”特性。呵呵,很有“波粒二象性”的味道吧?指代最重要的應用在于對于事件的處理,下一節(jié)我們將重點介紹。

6、事件(Event)

  C#對事件是直接支持的(這個特點也是MSVJ所具有的)。當前很多主流程序語言處理事件的方式各不相同,Delphi采用的是函數指針(這在Delphi中的術語是“closure”)、Java用改編類來實現、VC用WindowsAPI的消息系統(tǒng),而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 < 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;
 }
}

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

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

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

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

  指代機制的首次亮相是在MSVJ里,它是由Anders Hejlsberg發(fā)明的,現在又用到了C#中。指代用在Java語言中的后果,則直接導致了微軟和Sun之間對類和指針的關系產生了大量的爭論和探討。有意思的是,Java的發(fā)明者James Gosling非常幽默地稱呼指代的發(fā)明者Anders Hejlsberg為“‘函數指針’先生”,因為Anders Hejlsberg總是想方設法地把指針變相地往各種語言中放;不過有人在看了Java中大量地使用了各種類后,也戲稱Java的發(fā)明者James Gosling為“‘全都是類’先生”,真是其中滋味,盡在不言中啊。 



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区视频在线观看| 日韩三级视频中文字幕| 精品亚洲成av人在线观看| 麻豆高清免费国产一区| 成人h版在线观看| 欧美一区国产二区| 亚洲伦理在线精品| 国产一区不卡精品| 欧美美女激情18p| 国产精品久久久久久户外露出 | 国产美女精品一区二区三区| 99热这里都是精品| 国产亚洲女人久久久久毛片| 亚洲高清视频中文字幕| 91丨porny丨首页| 国产精品视频观看| 韩国成人福利片在线播放| 欧美剧情片在线观看| 亚洲电影在线播放| 色综合 综合色| 亚洲毛片av在线| 欧美色视频在线| 一区二区三区成人| 欧美日韩在线免费视频| 一区二区三区在线免费| 色妞www精品视频| 午夜精品视频一区| 亚洲精品一区二区三区影院| 国产一区二区三区黄视频 | 26uuu精品一区二区三区四区在线| 亚洲一区精品在线| 欧美成va人片在线观看| 国产麻豆精品一区二区| 精品1区2区在线观看| 成人av在线看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人av网站在线| 亚洲成av人影院| 欧美一区二区在线播放| 韩国三级中文字幕hd久久精品| 久久亚洲精品国产精品紫薇| 国产成人aaa| 久久精品国产一区二区三区免费看| 国产视频一区二区三区在线观看| 色94色欧美sute亚洲线路二| 美女网站一区二区| 亚洲大片在线观看| 中文字幕一区二区三区不卡在线 | 亚洲综合在线免费观看| 久久久久国产精品麻豆ai换脸 | 国产偷v国产偷v亚洲高清 | 亚洲一区二区偷拍精品| 国产欧美日韩中文久久| 欧美一级黄色大片| 欧美精品在欧美一区二区少妇| 丁香婷婷综合网| 国产精品一卡二卡| 久久99精品国产| 免费在线看成人av| 首页综合国产亚洲丝袜| 亚洲一区免费在线观看| 亚洲国产一区二区三区 | 欧美一区二区三区人| 欧美丝袜自拍制服另类| 91精品国产色综合久久不卡电影| 96av麻豆蜜桃一区二区| 从欧美一区二区三区| www.亚洲人| 欧美亚洲禁片免费| 欧美亚洲自拍偷拍| 精品久久久久久久久久久久久久久 | 亚洲欧美综合网| 亚洲免费色视频| 日日夜夜免费精品| 国产一区二区成人久久免费影院 | 欧美亚洲免费在线一区| 91精品国产综合久久婷婷香蕉| 欧美精品自拍偷拍| 中文字幕国产一区| 国精产品一区一区三区mba视频| 欧美性色黄大片手机版| 国产精品―色哟哟| 国产高清不卡二三区| 欧美精品一区二区高清在线观看| 欧美一区二区三区在线视频| 日韩久久精品一区| 亚洲精品国产视频| 国产美女视频一区| 一本大道久久a久久综合| 日韩你懂的电影在线观看| 国产精品久久久久影视| 图片区小说区区亚洲影院| 91免费国产在线观看| 精品奇米国产一区二区三区| 日韩影视精彩在线| 6080yy午夜一二三区久久| 亚洲国产日韩综合久久精品| 91尤物视频在线观看| 中文字幕视频一区| 粉嫩一区二区三区在线看| 久久精品日产第一区二区三区高清版| 亚洲大片在线观看| 9191精品国产综合久久久久久| 亚洲一区在线免费观看| 91小视频在线观看| 国产日韩欧美高清| 日韩一区精品视频| 欧洲一区二区av| 色婷婷亚洲一区二区三区| 国产一区视频网站| 夜夜精品视频一区二区| 欧美性色aⅴ视频一区日韩精品| 蜜桃精品视频在线| 亚洲欧美日韩一区二区| 911精品产国品一二三产区| 97se亚洲国产综合自在线 | 国产成人在线视频免费播放| 亚洲国产精品精华液ab| 欧美精品丝袜中出| 91亚洲永久精品| 久久99热这里只有精品| 国产精品成人一区二区艾草 | 六月婷婷色综合| 日日夜夜免费精品视频| 自拍偷拍亚洲综合| 26uuu国产日韩综合| 91麻豆免费在线观看| 日韩专区一卡二卡| 亚洲激情在线播放| 国产精品乱码妇女bbbb| 欧美va亚洲va国产综合| 色综合久久88色综合天天| 成人高清视频在线| 成人禁用看黄a在线| 99精品视频在线观看| av电影在线观看一区| 色一情一伦一子一伦一区| 欧美色综合天天久久综合精品| 在线播放中文字幕一区| 日韩精品一区二区三区老鸭窝| 欧美一区二区三区日韩| 精品视频免费看| 欧美三级视频在线播放| 日本久久电影网| 欧美日韩情趣电影| 91精品国产欧美一区二区成人| 678五月天丁香亚洲综合网| 欧美日韩成人高清| 51久久夜色精品国产麻豆| 欧美一区二区视频免费观看| 日韩欧美中文字幕精品| 久久综合久久鬼色中文字| 欧美精品视频www在线观看| 4438x亚洲最大成人网| 6080亚洲精品一区二区| 2021中文字幕一区亚洲| 日韩无一区二区| 欧美本精品男人aⅴ天堂| 国产欧美日韩在线视频| 亚洲色大成网站www久久九九| 一区二区免费看| 一区二区三区中文字幕| 亚洲国产成人精品视频| 国产主播一区二区三区| 色一区在线观看| 日本一区二区三区在线不卡| 亚洲已满18点击进入久久| 高清视频一区二区| 欧美久久一区二区| 亚洲青青青在线视频| 国产91对白在线观看九色| 日韩三级视频在线看| 美女视频免费一区| 在线亚洲+欧美+日本专区| 国产婷婷色一区二区三区四区| 亚洲成人免费在线| 欧美日韩激情一区二区| 性欧美疯狂xxxxbbbb| 在线欧美日韩精品| 亚洲精品视频在线观看网站| 成人毛片在线观看| 欧美精品18+| 亚洲欧洲制服丝袜| 91丨porny丨户外露出| 日韩理论片网站| 在线观看91视频| 性久久久久久久| 精品福利一二区| 国产一区二区三区综合| 久久久国产午夜精品 | 亚洲一区二区三区四区中文字幕| av网站免费线看精品| 一区二区高清免费观看影视大全 | 国产一区二区三区美女| 欧美高清在线视频| 欧美伊人久久大香线蕉综合69 | 国产一区二区主播在线| 中文字幕一区av| 精品视频全国免费看| 国产乱码字幕精品高清av|