C# 與 Java 的不同點總結

iDotNetSpace發表於2008-09-26

關於:C#Java 的不同點總結(C#的特點):

1.@

在字元竄前面加上@可使字元竄中的轉義符失效。可嘗試實行如下程式碼:

  1. string aaa = @"C:\\tmp\\aaa.txt";
  2. Console.WriteLine(aaa);
  3. aaa = "C:\\tmp\\aaa.txt";
  4. Console.WriteLine(aaa);

2.?可空型別和運算子

定義資料型別時可使用?以表示該資料庫性允許為null。例如:

  1. int? a = null;
  2. Console.WriteLine(a);

3.is運算子

判斷型別是否相容,相當於java的instanceof關鍵字。

 

4.sealed關鍵字

相當於java的final,表示類或方法不可繼承(密封)。

 

5.virtual關鍵字

表示該方法或該屬效能夠被重寫。在java中預設情況下所有方法和屬性都能被重寫。

 

6.部分類關鍵字partial

允許類,結構或介面放入多個檔案中。

  1.     //TheBigClass1.cs
  2.     partial class TheBigClass 
  3.     {
  4.         public void MethodOne()
  5.         { 
  6.         }
  7.     }
  8.     //TheBigClass2.cs
  9.     partial class TheBigClass
  10.     {
  11.         public void MethodTwo()
  12.         {
  13.         }
  14.     }

7.結構:struct

  1.     struct Dimensions 
  2.     {
  3.         public double Length;
  4.         public double Width;
  5.     }

8.只讀欄位readonly。

和定義常量欄位的coust的區別是,readonly欄位允許在類的建構函式中進行初始化(靜態建構函式中也可以初始化)。

 

9.靜態建構函式

  1.     class MyClass 
  2.     {
  3.         public static string value;
  4.         //靜態建構函式
  5.         static MyClass()
  6.         { 
  7.             //首次載入類時執行,只執行一次
  8.             value = "A";
  9.         }
  10.         //例項建構函式
  11.         private MyClass() 
  12.         { 
  13.             //每次建立類的例項時執行
  14.             value = "B";
  15.         }
  16.         static void Main(string[] args)
  17.         {
  18.             Console.WriteLine(value);//A
  19.             MyClass clz = new MyClass();
  20.             Console.WriteLine(value);//B
  21.         }
  22.     }

10.out關鍵字

允許函式從一個例程中輸出多個值。

請注意,使用out關鍵字時,變數是通過引用傳值的。所以在從被呼叫的方法返回時,方法對該變數的任何修改都會被保留下來。

  1.         static void Main(string[] args)
  2.         {
  3.             int i;
  4.             initInt(out i);
  5.             Console.WriteLine(i);
  6.         }
  7.         static void initInt(out int i) {
  8.             i = 100;
  9.         }

11.ref引數實現

給方法傳遞引數時的引用傳值。(通過值傳遞變數是預設的)

  1.         static void initInts(int[] ints, ref int i)
  2.         {
  3.             ints[0] = 200;
  4.             i = 300;
  5.         }

在呼叫方法時對應的欄位也要加上ref關鍵字

initInts(ints, ref i)

注意:使用引用傳值,該方法對變數的任何改變都會影響原來物件的值。

 

12.as運算子

判斷型別是否相容,不相容返回null.

  1.     class MyClass 
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             object o1 = "Some String";
  6.             object o2 = 5;
  7.             string s1 = o1 as string;
  8.             string s2 = o2 as string;
  9.             Console.WriteLine(s1);//"Some String"
  10.             Console.WriteLine(s2);//null
  11.         }
  12.     }

13.sizeof運算子

確定棧中值型別需要的長度(單位:位元組)

  1.     class MyClass
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Console.WriteLine(sizeof(int));
  6.         }
  7.     }

14.typeof運算子

返回一個特定型別的System.Type物件。

 

15.空接合運算子??

  1.     class MyClass
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             int? a = null;
  6.             int b;
  7.             b = a ?? 10;
  8.             Console.WriteLine(b);//10
  9.             a = 3;
  10.             b = a ?? 10;
  11.             Console.WriteLine(b);//3
  12.         }
  13.     }

如果第一個運算元不是null,則整個表示式等於第一個運算元的值。如果第一個運算元等於null,則這個表示式等於第二個運算元。

如果第二個運算元不能隱含的轉換為第一個運算元的的型別,就生成一個編譯錯誤。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-464492/,如需轉載,請註明出處,否則將追究法律責任。

相關文章