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

首頁 > 學院 > 開發設計 > 正文

華山論劍:C#對Java

2019-11-18 13:17:00
字體:
來源:轉載
供稿:網友

  一、C#、C++和java
  C#的語言規范由Microsoft的Anders Hejlsberg與Scott Wiltamuth編寫。在當前Microsoft天花亂墜的宣傳中,對C#和C++、Java作一番比較總是很有趣的。考慮到當前IT媒體的輿論傾向,假如你早就知道C#更接近Java而不是C++,事情也不值得大驚小怪。對于剛剛加入這場討論的讀者,下面的表1讓你自己作出判定。顯然,結論應該是:Java和C#雖然不是孿生子,但C#最主要的特色卻更接近Java而不是C++。
  
 華山論劍:C#對Java(圖一)


  了解表1總結的重要語言功能之后,請繼續往下閱讀,了解C#和Java的一些重要區別。
  
  二、語言規范的比較
  2.1、簡單數據類型
  
  簡單數據類型(PRimitive)在C#中稱為值類型,C#預定義的簡單數據類型比Java多。例如,C#有unit,即無符號整數。表2列出了所有C#的預定義數據類型:
  
華山論劍:C#對Java(圖二)

  2.2、常量
  
  忘掉Java中的static final修飾符。在C#中,常量可以用const要害詞聲明。
  
   public const int x = 55;
  
  此外,C#的設計者還增加了readonly要害詞。假如編譯器編譯時未能確定常量值,你可以使用readonly要害詞。readonly域只能通過初始化器或類的構造函數設置。
  
  2.3、公用類的入口點
  
  在Java中,公用類的入口點是一個名為main的公用靜態方法。main方法的參數是String對象數組,它沒有返回值。在C#中,main方法變成了公用靜態方法Main(大寫的M),Main方法的參數也是一個String對象數組,而且也沒有返回值,如下面的原型聲明所示:
  
   public static void Main(String[] args)
  
  但是,C#的Main方法不局限于此。假如不向Main方法傳遞任何參數,你可以使用上述Main方法的一個重載版本,即不帶參數列表的版本。也就是說,下面的Main方法也是一個合法的入口點:
  
   public static void Main()
  
  另外,假如你認為有必要的話,Main方法還可以返回一個int。例如,下面代碼中的Main方法返回1:
  
   using System;
  
  public class Hello {
  
  public static int Main() {
  
  Console.WriteLine("Done");
  
  return 1;
  
  }
  
  }
  
  與此相對,在Java中重載main方法是不合法的。
  
  2.4、switch語句
  
  在Java中,switch語句只能處理整數。但C#中的switch語句不同,它還能夠處理字符變量。請考慮下面用switch語句處理字符串變量的C#代碼:
  
   using System;
  
  public class Hello {
  
  public static void Main(String[] args) {
  
  switch (args[0]) {
  
  case "老板":
  
  Console.WriteLine("早上好!我們隨時預備為您效勞!");
  
  break;
  
  case "雇員":
  
  Console.WriteLine("早上好!你可以開始工作了!");
  
  break;
  
  default:
  
  Console.WriteLine("早上好!祝你好運!");
  
  break;
  
  }
  
  }
  
  }
  
  與Java中的switch不同,C#的switch語句要求每一個case塊或者在塊的末尾提供一個break語句,或者用goto轉到switch內的其他case標簽。
  
  2.5、foreach語句
  
  foreach語句枚舉集合中的各個元素,為集合中的每一個元素執行一次代碼塊。請參見下面的例子。
  
   using System;
  
  public class Hello {
  
  public static void Main(String[] args) {
  
  foreach (String arg in args)
  
  Console.WriteLine(arg);
  
  }
  
  }
  
  假如在運行這個執行文件的時候指定了參數,比如“Hello Peter Kevin Richard”,則程序的輸出將是下面幾行文字:
  
   Peter
  
  Kevin
  
  Richard
  
  2.6、C#沒有>>>移位操作符
  
  C#支持uint和ulong之類的無符號變量類型。因此,在C#中,右移操作符(即“>>”)對于無符號變量類型和帶符號變量類型(比如int和long)的處理方式不同。右移uint和ulong丟棄低位并把空出的高位設置為零;但對于int和long類型的變量,“>>”操作符丟棄低位,同時,只有當變量值是正數時,“>>”才把空出的高位設置成零;假如“>>”操作的是一個負數,空出的高位被設置成為1。
  
  Java中不存在無符號的變量類型。因此,我們用“>>>”操作符在右移時引入負號位;否則,使用“>>”操作符。
  
  2.7、goto要害詞
  
  Java不用goto要害詞。在C#中,goto答應你轉到指定的標簽。不過,C#以非凡謹慎的態度對待goto,比如它不答應goto轉入到語句塊的內部。在Java中,你可以用帶標簽的語句加上break或continue取代C#中的goto。
  
  2.8、聲明數組
  
  在Java中,數組的聲明方法非常靈活,實際上有許多種聲明方法都屬于合法的方法。例如,下面的幾行代碼是等價的:
  
   int[] x = { 0, 1, 2, 3 };
  
  int x[] = { 0, 1, 2, 3 };
  
  但在C#中,只有第一行代碼合法,[]不能放到變量名字之后。
  
  2.9、包
  
  在C#中,包(Package)被稱為名稱空間。把名稱空間引入C#程序的要害詞是“using”。例如,“using System;”這個語句引入了System名稱空間。
  
  然而,與Java不同的是,C#答應為名稱空間或者名稱空間中的類指定別名:
  
   using TheConsole = System.Console;
  
  public class Hello {
  
  public static void Main() {
  
  TheConsole.WriteLine("使用別名");
  
  }
  
  }
  
  雖然從概念上看,Java的包類似于.NET的名稱空間。然而,兩者的實現方式不同。在Java中,包的名字同時也是實際存在的實體,它決定了放置.java文件的目錄結構。在C#中,物理的包和邏輯的名稱之間是完全分離的,也就是說,名稱空間的名字不會對物理的打包方式產生任何影響。在C#中,每一個源代碼文件可以從屬于多個名稱空間,而且它可以容納多個公共類。
  
  .NET中包的實體稱為程序集(Assembly)。每一個程序集包含一個manifest結構。manifest列舉程序集所包含的文件,控制哪些類型和資源被顯露到程序集之外,并把對這些類型和資源的引用映射到包含這些類型與資源的文件。程序集是自包含的,一個程序集可以放置到單一的文件之內,也可以分割成多個文件。.NET的這種封裝機制解決了DLL文件所面臨的問題,即臭名昭著的DLL Hell問題。
  
  2.10、默認包
  
  在Java中,java.lang包是默認的包,它無需顯式導入就已經自動包含。例如,要把一些文本輸出到控制臺,你可以使用下面的代碼:
  
   System.out.println("Hello world from Java");
  
  C#中不存在默認的包。假如要向控制臺輸出文本,你使用System名稱空間Console對象的WriteLine方法。但是,你必須顯式導入所有的類。代碼如下:
  
   using System;
  
  public class Hello {
  
  public static void Main() {
  
  Console.WriteLine("Hello world from C#");
  
  }
  
  }
  
  2.11、面向對象
  
  Java和C#都是完全面向對象的語言。在面向對象編程的三大原則方面,這兩種語言接近得不能再接近。
  
  繼續:這兩種語言都支持類的單一繼續,但類可以實現多個接口。所有類都從一個公共的基類繼續。
  
  封裝與可見性:無論是在Java還是C#中,你都可以決定類成員是否可見。除了C#的internal訪問修飾符之外,兩者的可見性機制非常相似。
  
  多態性:Java和C#都支持某些形式的多態性機制,且兩者實現方法非常類似。
  
  2.12、可訪問性
  
  類的每個成員都有特定類型的可訪問性。C#中的訪問修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可訪問性,如下所示:
  
  public:成員可以從任何代碼訪問。
  
  protected:成員只能從派生類訪問。
  
  internal:成員只能從同一程序集的內部訪問。
  
  protected internal:成員只能從同一程序集內的派生類訪問。
  
  private:成員只能在當前類的內部訪問。
  
  2.13、派生類
  
  在Java中,我們用要害詞“extends”實現繼續。C#采用了C++的類派生語法。例如,下面的代碼顯示了如何派生父類Control從而創建出新類Button:
  public class Button: Control { . . }
  
  2.14、最終類
  
  由于C#中不存在final要害詞,假如想要某個類不再被派生,你可以使用sealed要害詞,如下例所示:
  
   sealed class FinalClass { . . }
  
  2.15、接口
  
  
  接口這個概念在C#和Java中非常相似。接口的要害詞是interface,一個接口可以擴展一個或者多個其他接口。按照慣例,接口的名字以大寫字母“I”開頭。下面的代碼是C#接口的一個例子,它與Java中的接口完全一樣:
  
   interface IShape { void Draw(); }
  
  擴展接口的語法與擴展類的語法一樣

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91成人免费看片 | 无码专区aaaaaa免费视频 | 国产在线精品一区二区夜色 | 欧美成人精品h版在线观看 国产一级淫片在线观看 | 久久久久久久久久久影视 | 欧美a级毛片| 羞羞网站在线观看入口免费 | 91经典视频 | 欧美成人一区二区三区电影 | 香蕉久草在线 | 国产毛片在线高清视频 | 2021国产精品视频 | 一级做a爱片久久毛片a高清 | 高清国产在线 | 一区在线免费视频 | 人人看人人舔 | 色毛片 | 国产xxxxx在线观看 | 免费观看黄色一级视频 | 欧美xxxwww| 看免费的毛片 | 日日草视频 | 成人勉费视频 | 久久国产28 | 精品国产一区三区 | 久久影院午夜 | 亚洲精久久 | 法国极品成人h版 | 国产一精品一av一免费爽爽 | 精品中文一区 | 夜夜夜精品视频 | 精品影视一区二区 | 欧美极品欧美精品欧美视频 | 久久精品视频日本 | 欧美精品18 | 毛片免费试看 | 高清国产免费 | 欧美国产精品一区二区 | 国产一区精品在线观看 | caoporn国产一区二区 | 青草伊人网 |