C#最引人入勝的地方是它和Java的不同,而不是相似的地方.本文講述了C#實現的和Java不同的地方或者 Java根本沒有的特點.
中間代碼
微軟在用戶選擇何時MSIL應該編譯成機器碼的時候是留了 很大的余地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數的話--程序員認為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現方式決定了基于MSIL的程序(指的是用C#,Visual Basic,"Managed C++"--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過"解釋性的"Java代碼.當然,這一點還需要得到事實證明,因為C#和 其他生成MSIL的編譯器還沒有發布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.象"C#是編譯語言而Java是解釋性的,"之類的聲明只是商業技巧.Java的中間代碼和 MSIL都是中間的匯編形式的語言,它們在運行時或其它的時候被編譯成機器代碼.
命名空間中的申明
當你創建一個程序的時候,你在一個命名空間里創建了一個或多個類.同在這個命名空間里(在類的外面)你還有可能聲明接口,枚舉類型和結構體.必須使用 using關鍵字來引用其他命名空間的內容.
基本的數據類型
C#擁有比C,C++或者 Java更廣泛的數據類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一樣,所有這些類型都有一個固定的大小.又象C和C++一樣,每個數據類型都有有符號和無符號兩種類型.與 Java相同的是,一個字符變量包含的是一個16位的Unicode字符.C#新的數據類型是decimal數據類型,對于貨幣數據,它能存放28位10 進制數字.
兩個基本類
一個名叫object的類是所有其他類的基類.而一個名叫string 的類也象object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它--無論何時你在程序中寫入一句帶引號的字符串,編譯器會創 建一個string對象來保存它.
參數傳遞
方法可以被聲明接受可變數目的參數.缺省的參數傳 遞方法是對基本數據類型進行值傳遞.ref關鍵字可以用來強迫一個變量通過引用傳遞,這使得一個變量可以接受一個返回值.out關鍵字也能聲明引用傳遞過 程,與ref不同的地方是,它指明這個參數并不需要初始值.
與COM的集成
C#對 Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術.實際上,最終有可能在任何.NET語言里編寫COM 客戶和服務器端.C#編寫的類可以子類化一個以存在的COM組件;生成的類也能被作為一個COM組件使用,然后又能使用,比方說,JScript語言子類 化它從而得到第三個COM組件.這種現象的結果是導致了一個運行環境的產生,在這個環境里的組件是網絡服務,可用用任何.NET語言子類化.
索引下標
一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括號中的數字來匿名引用(就象用數組下 標一樣)以外是相似的.
public class ListBox: Control {
private string[] items;
public string this[int index]
{
get
{
return items[index];
}
set
{
items[index] = value;
Repaint();
}
}
}
可以用一個循環器來匿名引用字符串內部數組成員,就象下面這樣:
ListBox listBox = ...;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
代理和反饋
一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當成一個聰明的方法指針就行 了.代理對象可以被移動到另一個地方,然后可以通過訪問它來對已存在的方法進行類型安全的調用.一個反饋方法是代理的特例.event關鍵字用在將在事件 發生的時候被當成代理調用的方法聲明.
|
新聞熱點
疑難解答
圖片精選