C#引人入勝的地方是它和Java的不同,而不是相似的地方.這(zhè)一節講述了C#實現的和Java不同的地方或者Java根本沒(méi)有的特點.
中間代碼:
微軟在用戶選擇何時MSIL應該編譯成(chéng)機器碼的時候是留了很大的餘地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被(bèi)編譯成(chéng)了機器碼.它也明白許多--如果不是大多數的話--程序員認爲Java程序要不可避免的比C編寫的任何東西都(dōu)要慢.而這(zhè)種(zhǒng)實現方式決定了基于MSIL的程序(指的是用C#,Visual Basic,"ManagedC++"--C++的一個符合CLS的版本--等語言編寫的程序)將(jiāng)在性能(néng)上超過(guò)"解釋性的"Java代碼.當然,這(zhè)一點還(hái)需要得到事(shì)實證明,因爲C#和其他生成(chéng)MSIL的編譯器還(hái)沒(méi)有發(fā)布.但是Java JIT編譯器的普遍存在使得Java和C#在性能(néng)上相對(duì)相同.象"C#是編譯語言而Java是解釋性的,"之類的聲明隻是商業技巧.Java的中間代碼和MSIL都(dōu)是中間的彙編形式的語言,它們在運行時或其它的時候被(bèi)編譯成(chéng)機器代碼.
命名空間中的申明:
當你創建一個程序的時候,你在一個命名空間裡(lǐ)創建了一個或多個類.同在這(zhè)個命名空間裡(lǐ)(在類的外面(miàn))你還(hái)有可能(néng)聲明界面(miàn),枚舉類型和結構體.必須使用using關鍵字來引用其他命名空間的内容.
基本的數據類型:
C#擁有比C,C++或者Java更廣泛的數據類型.這(zhè)些類型是bool, byte, ubyte, short, ushort, int,uint, long, ulong, float, double,和decimal.象Java一樣(yàng),所有這(zhè)些類型都(dōu)有一個固定的大小.又象C和C++一樣(yàng),每個數據類型都(dōu)有有符号和無符号兩(liǎng)種(zhǒng)類型.與Java相同的是,一個字符變量包含的是一個16位的Unicode字符.C#新的數據類型是decimal數據類型,對(duì)于貨币數據,它能(néng)存放28位10進(jìn)制數字.
兩(liǎng)個基本類:
一個名叫(jiào)object的類是所有其他類的基類.而一個名叫(jiào)string的類也象object一樣(yàng)是這(zhè)個語言的一部分.
作爲語言的一部分存在意味著(zhe)編譯器有可能(néng)使用它--無論何時你在程序中寫入一句帶引号的字符串,編譯器會創建一個string對(duì)象來保存它.
參數傳遞:
方法可以被(bèi)聲明接受可變數目的參數.缺省的參數傳遞方法是對(duì)基本數據類型進(jìn)行值傳遞.ref關鍵字可以用來強迫一個變量通過(guò)引用傳遞,這(zhè)使得一個變量可以接受一個返回值.out關鍵字也能(néng)聲明引用傳遞過(guò)程,與ref不同的地方是,它指明這(zhè)個參數并不需要初始值.
與COM的集成(chéng):
C#對(duì)Windows程序大的賣點可能(néng)就是它與COM的無縫集成(chéng)了,COM就是微軟的Win32組件技術.實際上,有可能(néng)在任何.NET語言裡(lǐ)編寫COM客戶和服務器端.C#編寫的類可以子類化一個以存在的COM組件;生成(chéng)的類也能(néng)被(bèi)作爲一個COM組件使用,然後(hòu)又能(néng)使用,比方說,JScript語言子類化它從而得到第三個COM組件.這(zhè)種(zhǒng)現象的結果是導緻了一個運行環境的産生,在這(zhè)個環境裡(lǐ)的組件是網絡服務,可用用任何.NET語言子類化.
索引下标:
一個索引與屬性除了不使用屬性名來引用類成(chéng)員而是用一個方括号中的數字來匿名引用(就象用數組下标一樣(yàng))以外是相似的.
代理和反饋:
一個代理對(duì)象包括了訪問一個特定對(duì)象的特定方法所需的信息.隻要把它當成(chéng)一個聰明的方法指針就行了.代理對(duì)象可以被(bèi)移動到另一個地方,然後(hòu)可以通過(guò)訪問它來對(duì)已存在的方法進(jìn)行類型安全的調用.一個反饋方法是代理的特例.event關鍵字用在將(jiāng)在事(shì)件發(fā)生的時候被(bèi)當成(chéng)代理調用的方法聲明中.