人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

C#、Java之比較(1)

C#、Java之比較(1)

更新時(shí)間:2021-03-06 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

2000-09-27· coolboy·yesky

  很多人說(shuō)C#是微軟用來(lái)和Java抗衡的武器,因?yàn)槎咴诤艽蟪潭壬嫌兄@人的相似,盡管如此,兩者不同的地方也很多,所謂“于細(xì)微處見(jiàn)差異”。那么兩者的相似和區(qū)別都在什么地方呢?我們從今天開(kāi)始,會(huì)從各個(gè)角度來(lái)對(duì)比C#和Java的特點(diǎn),希望能對(duì)正在學(xué)習(xí)、使用C#的朋友有所幫助。

1、C#和.NET平臺(tái)的概貌

  2000年6月,微軟發(fā)布C#語(yǔ)言和.NET平臺(tái)。C#語(yǔ)言是一種強(qiáng)類型的,面向?qū)ο蟮恼Z(yǔ)言,它具有語(yǔ)法簡(jiǎn)單、表達(dá)力強(qiáng)的特點(diǎn),而.NET平臺(tái)則是構(gòu)成微軟的“.NET計(jì)劃”的基石。

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

2、C#和Java

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

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

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

  都不需要頭文件,所有的代碼都被“包(package)”限制在某個(gè)范圍內(nèi),并且因?yàn)闆](méi)有頭文件,所以消除了類定義的循環(huán)依賴

  所有的類都是從對(duì)象派生出來(lái),并且必須使用New關(guān)鍵字分配內(nèi)存

  用對(duì)象加鎖的方式來(lái)支持多線程

  都具有接口(interface)的概念

內(nèi)部類

  繼承類的時(shí)候不會(huì)以某種特定的訪問(wèn)權(quán)限來(lái)繼承;

  沒(méi)有全局函數(shù)或者常量,一切必須屬于類;

  數(shù)組或者字符串都自帶長(zhǎng)度計(jì)算和邊界檢查;

  只使用“.”操作符,沒(méi)有“->”和“::”;

  “null”、“boolean”和“bool”成為了關(guān)鍵字;

  任何變量均在使用前進(jìn)行初始化;

  不能使用整數(shù)來(lái)返回到if條件語(yǔ)句中,必須使用布爾值;

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

3. 屬性(Property)

  屬性的概念對(duì)大家來(lái)說(shuō)應(yīng)該是很熟悉的,類成員函數(shù)可以自由地訪問(wèn)本類中的任何屬性成員。不過(guò)若要從一個(gè)類中去訪問(wèn)另一個(gè)類中的屬性,那就比較麻煩了,所以很多時(shí)候我們使用Getxxx和Setxxx方法,這樣看起來(lái)顯得極不自然,比如用Java或者C++,代碼是這樣的:

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

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

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

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

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)”,而“屬性”則成為這種“屬性化的方法”專用的名詞。順便說(shuō)一句,其實(shí)這樣的屬性化方法在VB和DELPHI中是經(jīng)常碰到的,在VB中它也就叫屬性。

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

4、對(duì)象索引機(jī)制(Indexer)

  C#中引入了對(duì)象索引機(jī)制。說(shuō)得明白點(diǎn),對(duì)象索引其實(shí)就是對(duì)象數(shù)組。這里和上一節(jié)中的屬性聯(lián)系起來(lái)講一下,屬性需要隱藏Get和Set方法,而在索引機(jī)制中,各個(gè)對(duì)象的Get或者Set方法是暴露出來(lái)的。比如下面的例子就比較清楚地說(shuō)明了這一點(diǎn)。

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", ...);

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

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 扎囊县| 永修县| 自贡市| 清河县| 当雄县| 扶余县| 昌邑市| 漯河市| 凤山市| 双柏县| 抚松县| 宜宾市| 昌吉市| 池州市| 资中县| 哈巴河县| 商城县| 安乡县| 和顺县| 陈巴尔虎旗| 正阳县| 拜泉县| 安福县| 鸡东县| 安仁县| 石阡县| 顺义区| 湘阴县| 龙胜| 和顺县| 巴彦淖尔市| 德保县| 吴江市| 连云港市| 林口县| 东莞市| 南江县| 镇赉县| 二连浩特市| 改则县| 灵璧县|