麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

C#與Java的比較(一)

2024-07-21 02:20:21
字體:
來源:轉載
供稿:網友

商業源碼熱門下載www.html.org.cn

                     c#與java的比較(轉一)
     
    c#是微軟用來和java抗衡的武器,因為二者在很大程度上有著驚人的相似,盡管如此,兩者不同的地方也很多,所謂“于細微處見差異”。那么兩者的相似和區別都在什么地方呢?我們從今天開始,會從各個角度來對比c#和java的特點,希望能對正在學習、使用c#的朋友有所幫助。

1、c#和.net平臺的概貌

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

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

2、c#和java

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

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

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

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

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

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

  都具有接口(interface)的概念

內部類

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

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

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

  只使用“.”操作符,沒有“-$#@62;”和“::”;

  “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;}
}

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

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

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

  呵呵,有了這種特性,我們就再不用怕課堂上老師叫我們寫對象數組這種程序了。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91 在线 | 宅男视频在线观看免费 | asiass极品裸体女pics | 密室逃脱第一季免费观看完整在线 | 国产精品成人免费一区久久羞羞 | 国产精品啪| 国产精品99久久久久久久女警 | 欧美乱码精品一区 | 日本在线不卡一区二区 | 欧美人与性禽动交精品 | 精品国产一区二区三区在线观看 | 神马视频我不卡 | 精品国产一区二区三区久久久蜜月 | 粉嫩av一区二区三区四区在线观看 | 激情小说激情电影 | 成年人免费黄色片 | 久久综合综合久久 | 国产成视频在线观看 | 青久草视频 | 国产精品av久久久久久无 | 美女黄污视频 | 国产精品亚洲综合 | 午夜久久视频 | 性高跟鞋xxxxhd4kvideos | 天天干天天碰 | asian超清日本肉体pics | 日韩黄色片在线观看 | 国产成人免费精品 | 欧美激情猛片xxxⅹ大3 | 国产乱淫av片免费网站 | 欧美成人黄色小视频 | 精品国产一区二区三区蜜殿 | 欧美a视频 | 亚洲精品aa| 成人观看网站 | 精品亚洲福利一区二区 | 一边吃奶一边插下面 | 欧美日韩高清不卡 | 男女牲高爱潮免费视频男女 | 久久久一区二区精品 | av成人免费在线观看 |