c與c++語法區(qū)別(經(jīng)典推薦)_第1頁
c與c++語法區(qū)別(經(jīng)典推薦)_第2頁
c與c++語法區(qū)別(經(jīng)典推薦)_第3頁
c與c++語法區(qū)別(經(jīng)典推薦)_第4頁
c與c++語法區(qū)別(經(jīng)典推薦)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、緒論 C#是這樣的一種語言,具有C+的特點,象Java一樣的編程風(fēng)格, 并且象Basic一樣的快速開發(fā)模型。如果你已經(jīng)知道了C+,本文會在不到一個小時的時間內(nèi)讓你迅速掌握C#的語法。熟悉Java的話會更好,因為Java的程序結(jié)構(gòu)、打包(Packages)和垃圾收集的概念有助于你更快的了解C#。因此在討論C#的構(gòu)造時,我會假定你了解C+。 本文會討論C#語言的構(gòu)造與特點,同時會采取簡潔的和你能理解的方式使用些代碼示例,我們會盡量讓你能稍微看看這些代碼就能理解這些概念。 注意:本文不是為C#高手(C# gurus)所寫. 這是針對在C#學(xué)習(xí)上還是初學(xué)者的文章。下面是將要討論的C#問題的目錄: 程序

2、結(jié)構(gòu) 命名空間 數(shù)據(jù)類型 變量 運算符和表達式 枚舉 語句(Statements ) 類(Classes)和結(jié)構(gòu)(Structs) 修飾符(Modifiers) 屬性(Properties) 接口(Interfaces) 方法參數(shù)(Function Parameters) 數(shù)組(Arrays) 索引器(Indexers) 裝箱及拆箱操作 委托(Delegates) 繼承和多態(tài) 下面的內(nèi)容將不會在被討論之列: C+與C#誰更通用 諸如垃圾回收、線程以及文件處理等概念 數(shù)據(jù)的類型轉(zhuǎn)換 異常處理 .NET庫- 程序結(jié)構(gòu) - 這一點象C+,C#是一種對大小寫字母敏感的語言,分號“;”是語句間的分隔符。

3、與C+不同的是,C#當(dāng)中聲明代碼文件(頭文件)與實現(xiàn)代碼文件(cpp文件)不是獨立存在的,所有代碼(類聲明和類實現(xiàn))都位于一個擴展名為cs的文件內(nèi)。 讓我們瞧瞧C#當(dāng)中的 Hello world 程序是怎樣的。 using System; namespace MyNameSpace class HelloWorld static void Main(string args) Console.WriteLine ("Hello World"); 在C#當(dāng)中的每樣?xùn)|西都被封裝到一個類中,C#的類又被封裝到一個命名空間當(dāng)中(就象一個文件夾中的文件)。類似于 C+,main方法是你

4、的程序的入口點。C+的main函數(shù)調(diào)用名稱是"main",而C#的main函數(shù)是以大寫字母M為起點的名稱是"Main"。 沒有必要把分號分隔符放在類語句塊或者結(jié)構(gòu)定義語句塊后。這在C+當(dāng)中被要求,但在C#當(dāng)中卻不是。- 命名空間 - 每一個類都被包裝進一個命名空間。命名空間的概念與C+的完全相同,但在C#當(dāng)中使用命名空間的頻率較C+還高。你可以使用點限定符(dot qulifier)訪問一個類。在上面的hello world程序當(dāng)中MyNameSpace就是一個命名空間。 現(xiàn)在思考這樣的一個問題,你想從某些別的類的命名空間當(dāng)中來訪問HelloWorld這

5、個類該如何操作。 這有一個例子: using System; namespace AnotherNameSpace class AnotherClass public void Func() Console.WriteLine ("Hello World"); 現(xiàn)在,從你的HelloWorld類里你能象這樣去訪問上面的這個AnotherNameSpace的命名空間: using System; using AnotherNameSpace; / you will add this using statement namespace MyNameSpace class Hel

6、loWorld static void Main(string args) AnotherClass obj = new AnotherClass(); obj.Func(); 在.NET庫當(dāng)中,System是位于頂層的命名空間,別的命名空間都存在這個命名空間之下。默認狀態(tài)下,存在一個全局的命名空間,因此一個在命名空間外定義的類將直接在這個全局命名空間之下;因此,你能在沒有任何點限定符的情況下訪問這個類。 你也可以象下面這樣定義嵌套的命名空間。 Using C+當(dāng)中的"#include"指示被C#的"using"關(guān)鍵字取代,它后面跟著一個命名空間的名字。

7、正如上面的"using System"。"System"是別的所有被封裝的命名空間和類中最底層的命名空間。所有對象的基類都是System命名空間內(nèi)的Object類派生的。- 變量 - 除以下區(qū)別外,C#當(dāng)中的變量幾乎與C+同: 與C+不同,C#變量被訪問之前必須被初始化;否則編譯時會報錯。因此,訪問一個未初始化變量是不可能的事。 C#中你不會訪問到一個不確定的指針。(譯者注:嚴格說起來C#已經(jīng)把指針概念異化,限制更嚴格。所以有些資料上會說C#取消了指針概念) 一個超出數(shù)組邊界的表達式是不可訪問的。 C#中沒有全局的的變量或全局函數(shù),全局方式的操作是通過靜

8、態(tài)函數(shù)和靜態(tài)變量來實現(xiàn)的。 - 數(shù)據(jù)類型 - 所有C#數(shù)據(jù)類型都派生自基類Object。這里有兩類數(shù)據(jù)類型: 基本型/內(nèi)置型 用戶自定義型 下面一個C#內(nèi)置類型列表: 類型 字節(jié)數(shù) 解釋 byte 1 無符號字節(jié)型 sbyte 1 有符號字節(jié)型 short 2 有符號短字節(jié)型 ushort 2 無符號短字節(jié)型 int 4 有符號整型 uint 4 無符號整型 long 8 有符號長整型 ulong 8 無符號長整型 float 4 浮點數(shù) double 8 雙精度數(shù) decimal 8 固定精度數(shù) string Unicode 字串型 char Unicode 字符型 bool 真假 布爾型

9、注意:C#當(dāng)中的類型范圍與C+有所不同;例如,C+的long型是4個字節(jié),而在C#當(dāng)中是8個字節(jié)。同樣地,bool型和string型都不同于C+。bool型只接受true和false兩種值。不接受任何整數(shù)類型。 用戶定義類型包括: 類類型(class) 結(jié)構(gòu)類型(struct) 接口類型(interface) 根據(jù)數(shù)據(jù)類型的內(nèi)存分配形式的不同又把它們分成了兩種類型: 值類型(value Types) 引用類型(Reference Types) 值類型: 值類型數(shù)據(jù)在棧中分配。他們包括:所有基本或內(nèi)置類型(不包括string類型)、結(jié)構(gòu)類型、枚舉類型(enum type) 引用類型: 引用類型在

10、堆中分配,當(dāng)它們不再被使用時將被垃圾收集。它們使用new運算符來創(chuàng)建,對這些類型而言,不存在C+當(dāng)中的delete操作符,根本不同于C+會顯式使用delete這個運算符去釋放創(chuàng)建的這個類型。C#中,通過垃圾收集器,這些類型會自動被收集處理。 引用類型包括:類類型、接口類型、象數(shù)組這樣的集合類型類型、字串類型。 枚舉類型與C+當(dāng)中的概念非常相似。它們都通過一個enum關(guān)鍵字來定義。 示例: enum Weekdays Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday 類類型與結(jié)構(gòu)類型的比較 除了在內(nèi)存分配形式上外,類與結(jié)

11、構(gòu)的概念完全與C+相同。類的對象被分配在堆中,并且通過new來創(chuàng)建,結(jié)構(gòu)也是被new創(chuàng)建但卻被分配在棧當(dāng)中。C#當(dāng)中,結(jié)構(gòu)型適于快速訪問和擁有少量成員的數(shù)據(jù)類型。如果涉及量較多,你應(yīng)該創(chuàng)建一個類來實現(xiàn)他。 (譯者注:這與堆和棧內(nèi)存分配結(jié)構(gòu)的特點有關(guān)。簡而言之,棧是一種順序分配的內(nèi)存;堆是不一定是連續(xù)的內(nèi)存空間。具體內(nèi)容需要大家參閱相關(guān)資料) 示例: struct Date int day; int month; int year; class Date int day; int month; int year; string weekday; string monthName; public

12、int GetDay() return day; public int GetMonth() return month; public int GetYear() return year; public void SetDay(int Day) day = Day ; public void SetMonth(int Month) month = Month; public void SetYear(int Year) year = Year; public bool IsLeapYear() return (year/4 = 0); public void SetDate (int day,

13、 int month, int year) . - 屬性 - 如果你熟悉C+面象對象的方式,你就一定有一個屬性的概念。在上面示例當(dāng)中,以C+的觀點來看,Data類的屬性就是day、month和year。用C#方式,你可以把它們寫成Get和Set方法。C#提供了一個更方便、簡單、直接的方式來訪問屬性。 因此上面的類可以被寫成: using System; class Date public int Day get return day; set day = value; int day; public int Month get return month; set month = value;

14、int month; public int Year get return year; set year = value; int year; public bool IsLeapYear(int year) return year%4= 0 ? true: false; public void SetDate (int day, int month, int year) this.day = day; this.month = month; this.year = year; 你可在這里得到并設(shè)置這些屬性: class User public static void Main() Date

15、date = new Date(); date.Day = 27; date.Month = 6; date.Year = 2003; Console.WriteLine("Date: 0/1/2", date.Day, date.Month, date.Year); - 修飾符 - 你必須已經(jīng)知道public、private、protected這些常在C+當(dāng)中使用的修飾符。這里我會討論一些C#引入的新的修飾符。 readonly(只讀) readonly修飾符僅在類的數(shù)據(jù)成員中使用。正如這名字所提示的,readonly 數(shù)據(jù)成員僅能只讀,它們只能在構(gòu)造函數(shù)或是直接初始化操

16、作下賦值一次。readonly與const數(shù)據(jù)成員不同,const 要求你在聲明中初始化,這是直接進行的??聪旅娴氖纠a: class MyClass const int constInt = 100; /直接初始化 readonly int myInt = 5; /直接初始化 readonly int myInt2; /譯者注:僅做聲明,未做初始化 public MyClass() myInt2 = 8; /間接的 public Func() myInt = 7; /非法操作(譯者注:不得賦值兩次) Console.WriteLine(myInt2.ToString(); sealed(密

17、封) 密封類不允許任何類繼承,它沒有派生類。因此,你可以對你不想被繼承的類使用sealed關(guān)鍵字。 sealed class CanNotbeTheParent int a = 5; unsafe(不安全) 你可使用unsafe修飾符來定義一個不安全的上下文。在不安全的上下文里,你能寫些如C+指針這樣的不安全的代碼??聪旅娴氖纠a: public unsafe MyFunction( int * pInt, double* pDouble) int* pAnotherInt = new int; *pAnotherInt = 10; pInt = pAnotherInt; . *pDoubl

18、e = 8.9; - interface(接口) - 如果你有COM方面的概念,你會立刻明白我要談?wù)摰膬?nèi)容。一個接口就是一個抽象的基類,這個基類僅僅包含功能描述,而這些功能的實現(xiàn)則由子類來完成。C#中你要用interface關(guān)鍵字來定義象接口這樣的類。.NET就是基于這樣的接口上的。C#中你不支持C+所允許的類多繼承(譯者注:即一個派生類可以從兩個或兩個以上的父類中派生)。但是多繼承方式可以通過接口獲得。也就是說你的一個子類可以從多個接口中派生實現(xiàn)。 using System; interface myDrawing int originx get; set; int originy get;

19、 set; void Draw(object shape); class Shape: myDrawing int OriX; int OriY; public int originx get return OriX; set OriX = value; public int originy get return OriY; set OriY = value; public void Draw(object shape) . / do something / class's own method public void MoveShape(int newX, int newY) . -

20、 Arrays(數(shù)組) - C#中的數(shù)組比C+的表現(xiàn)更好。數(shù)組被分配在堆中,因此是引用類型。你不可能訪問超出一個數(shù)組邊界的元素。因此,C#會防止這樣類型的bug。一些輔助方式可以循環(huán)依次訪問數(shù)組元素的功能也被提供了,foreach就是這樣的一個語句。與C+相比,C#在數(shù)組語法上的特點如下: 方括號被置于數(shù)據(jù)類型之后而不是在變量名之后。 創(chuàng)建數(shù)組元素要使用new操作符。 C#支持一維、多維以及交錯數(shù)組(數(shù)組中的數(shù)組)。 示例: int array = new int10; / 整型一維數(shù)組 for (int i = 0; i < array.Length; i+) array = i; int, array2 = new int5,10; / 整型二維數(shù)組 array21,2 = 5; int, array3 = new int5,10,5; / 整型的三維數(shù)組 array30,2,4 = 9; int arrayOfarray = = new int2; / 整型交錯數(shù)組(數(shù)組中的數(shù)組) arrayOfarray0 = new int4; arrayOfarray0 = new int 1,2,15; - 索引器 - 索引器被用于寫一個訪問集合元素的方法,集合使用""這樣的直接方式,類似于數(shù)組。你所

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論