java與C#區別1

來源:互聯網
上載者:User

1.         Main方法(入口)

唯一的四種格式:

static voidMain(string[] args)

static voidMain()

static intMain(string[] args)

static intMain()

C#中一個項目只允許一個Main入口,且大寫!

Main方法傳回值只為void or int 前面沒有修飾符

2.         資料類型方面。

a)       C#定義了struct(結構),不能是抽象的,也不能被繼承,是實值型別的。

b)      C#沒有基本類型的概念,全部是物件導向的類型,int是Int32的簡寫。

c)      在Java中const是保留字,final與C#中的const意思相同,C#中還有readonly允許運行時賦初值。

d)      字串比較,C#中可以用=比較值,與Java一樣用StringBuffer來減少記憶體開銷。

e)       Java中String是引用資料類型,C#中string是基礎資料型別 (Elementary Data Type)。

3.         運算子方面

C#增加了Checked和Unchecked以繞過編譯錯誤。比如“把一個long付給int32 ,如果高32為零,則不會出錯,否則會有溢出錯誤,unchekced就是告訴編譯器不要去管溢出,盡你可能轉化”

4.         分支語句方面

在Java中goto是保留字。C#中switch中的case不會順序執行,末尾必須有break或者goto關鍵字;java中不用。同時case中的資料類型不僅支援int和char,還支援其它資料類型。

5.         屬性:

java中定義和訪問均要用get和set方法,可以不成對出現。

c#中是真正的屬性,定義時get和set必須同時出現,訪問時用.號即可。不用get,set。

6.         數組:

int[] x = { 0, 1, 2, 3 };

int x[] = { 0, 1, 2, 3 };

但在C#中,只有第一行代碼合法,[]不能放到變數名字之後。

7.         在Java中,包的名字同時也是實際存在的實體,它決定了放置.java檔案的目錄結構。在C#中,物理的包和邏輯的名稱之間是完全分離的

.NET中包的實體稱為程式集(Assembly)。每一個程式集包含一個manifest結構。manifest列舉程式集所包含的檔案,控制哪些類型和資源被顯露到程式集之外,並把對這些類型和資源的引用映射到包含這些類型與資源的檔案。程式集是自包含的,一個程式集可以放置到單一的檔案之內,也可以分割成多個檔案。.NET的這種封裝機制解決了DLL檔案所面臨的問題,即臭名昭著的DLL Hell問題。

8.         存取修飾詞方面:

C#中的存取修飾詞與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可訪問性,如下所示:

public:成員可以從任何代碼訪問。

protected:成員只能從衍生類別訪問。

internal:成員只能從同一程式集的內部訪問。

protected internal:成員只能從同一程式集內的衍生類別訪問。

private:成員只能在當前類的內部訪問。

9.         由於C#中不存在final關鍵詞,如果想要某個類不再被派生,你可以使用sealed關鍵詞

10.     繼承方面:

C#增加了base關鍵字以指向父類。C#中父類方法中具有virtual關鍵字的才可以被子類重寫,重寫時還需要聲明override。與抽象類別相同,abstract關鍵字也必須被override重寫。

11.     運算子多載

Java中無。運算子多載必須為類的靜態方法,重載==,其他判斷操作也必許重載。

12.     C#增加了索引器,可以象訪問數組一樣訪問類或結構。

13.     與Java不同,C#中的介面不能包含域(Field)。

另外還要注意,在C#中,介面內的所有方法預設都是公用方法。在Java中,方法聲明可以帶有public修飾符(即使這並非必要),但在C#中,顯式為介面的方法指定public修飾符是非法的。

14.     異常方面

與Java非常相似,只是沒有throws關鍵字,無須截獲異常(當然要在程式主入口去截)。

15.     方法方面

與Java相同,只有基本類型通過值傳遞,其他都是傳遞引用。不過C#也可以以引用的方式傳遞基本類型,利用ref關鍵字。而out關鍵字有些類似於Oracle預存程序,與ref的區別在於:方法忽略out參數初始值,方法必須為out參數賦值。

16.     在C#中也可以直接使用指標,開闢或者回收記憶體,只是要使用兩個關鍵字unsafe和fixed。

17.     委託

委託(delegate)可以看作C++或者其他語言中的函數指標

委託用來封裝可調用方法。你可以在類裡面編寫方法並在該方法上建立委託,此後這個委託就可以被傳遞到第二個方法。這樣,第二個方法就可以調用第一個方法。

委託是從公用基類System.Delegate派生的參考型別。定義和使用委託包括三個步驟:聲明,建立執行個體,調用。委託用delegate聲明文法聲明。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.