C# Java之比較 (轉)
很多人說是用來和抗衡的武器 因為二者在很大程度上有著驚人的相似 儘管如此 兩者不同的地方也很多
所謂“於細微處見差異”。那麼兩者的相似和區別都在什麼地方呢 我們從今天開始 會從各個角度來對比C#和Java的特
點 希望能對正在學習 使用C#的朋友有所幫助。
1 C#和平臺的概貌
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)的概念
內部類
繼承類的時候不會以某種特定的訪問來繼承?
沒有全域性函式或者常量 一切必須屬於類?
陣列或者字串都自帶長度計算和邊界檢查?
只使用“.”運算子 沒有“->”和“::”?
“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和中是經常碰到的 在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", ...);
呵呵 有了這種特性 我們就再不用怕課堂上老師叫我們寫物件陣列這種程式了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++、Java/C#之比較 (轉)C++JavaC#
- Free BSD,Linux之比較(轉)Linux
- Python 與 Javascript 之比較PythonJavaScript
- Visual C++與Delphi/C++Builder之比較 (轉)C++UI
- 【筆記】RDBMS和NOSQL之比較筆記SQL
- 12種JavaScript MVC框架之比較JavaScriptMVC框架
- mysql——ROUND與TRUNCATE函式之比較MySql函式
- 常見資料庫系統之比較 - SYBASE 和 SQL SERVER(轉)資料庫SQLServer
- 常見資料庫系統之比較 - Oracle資料庫(轉)資料庫Oracle
- 解構反應式程式設計——Java8,RxJava,Reactor之比較程式設計RxJavaReact
- (轉貼) C++,C#,Java功能比較 (.NET) (C#) (C/C++)C++C#Java
- 國內外專案管理軟體之比較專案管理
- SQL、Linux 指令碼與 Ruby 之比較 ZTSQLLinux指令碼
- 常見資料庫系統之比較 - DB2資料庫(轉)資料庫DB2
- 普通使用者應該考慮的 linux @ windows x 之比較(轉)LinuxWindows
- ERP系統之比較——SAP、Oracle、BAAN、JDE、SSAOracle
- Django筆記二十四之資料庫函式之比較和轉換函式Django筆記資料庫函式
- 常見資料庫系統之比較 - 資料庫的發展和現狀(轉)資料庫
- C語言入門學習記錄(4)之比較運算C語言
- C#比較兩個字串的相似度【轉】C#字串
- J2EE vs. NET, Java vs. C#:比較公正的評價 (轉)JavaC#
- C# DataRow 比較C#
- ASP.NET 與 JAVA 的比較 (轉)ASP.NETJava
- 淺談C# vs Java (1) (轉)C#Java
- 我理解的IOC技術在Java和C#中比較分析JavaC#
- Java排序演算法速度比較(轉載)Java排序演算法
- 優思學院|什麼是業務流程重組(BPR)?與六西格瑪管理之比較
- JSON-RPC-Java 和DWR比較(轉)JSONRPCJava
- JAVA中文比較問題的分析和解決 (轉)Java
- Java中對HashMap的深度分析與比較(轉)JavaHashMap
- Go與C#的比較 - RedditGoC#
- C#比較dynamic和Dictionary效能C#
- Java 比較器Java
- JAVA字串比較Java字串
- C#簡介:VC的NET,JAVA的KILLER? (轉)C#Java
- Java、C#執行緒模型分析對比 (轉)JavaC#執行緒模型
- java比較日期大小Java
- Java和JavaSciprt比較Java