因為要看看Monocross的東西,用它去實現移動開發的跨平台。Monocross是利用C# .net 去做的,所以就看了下C#,C#與C++及java都蠻相似,但也有其一些獨特的東西,稍稍小結如下:
1、C#是一門建立在C++和java基礎上的物件導向的跨平台語言,但與java不同的是,C#的跨平台不是依賴於JVM,而是.net framework,這是C#與java的本質差別。
java編譯後形成位元組代碼,這些代碼需要在jre(java runtime environment)下提供的JVM上運行;C#程式也被編譯成IL(intermediate Language),運行在.net framework 的通用語言執行平台(Common Language Runtime)。
2、C#拋棄了C++中指標,禁止直接的記憶體操作。
3、C#的全部代碼都屬於類和對象的代碼,不存在全域變數、全域函數的概念。繼承方面,C#只允許單繼承。
4、強大的web應用支援;對XML的高度支援;
5、二維數組:
e.g.定義一個二維整型數組a:
int [,]a;a = new int[2,3];orint [,]a = new int[2,3]{{1,2,3},{4,5,6}};
6、枚舉:
int[] a ={1,2,3,4};foreach(int i in a){ Console.WriteLine(i); }
7、類的概念及繼承、重載、多態的概念與C++類似。
在衍生類別中訪問基類中的成員,用base.xxx 。
衍生類別D的建構函式調用基類C中的重載的建構函式: public D(int x, int y,int z) : base(x,y) {this.z = z;}
8、介面:
interface I{ void f(int x); }class A: I{ public void f(int x) { }}
介面聲明:
interface I1{ void f(int x); //方法 int att{get;set;} //屬性,可讀寫 event EventHandler OnDraw; //事件 string this [int index] {get; set;} //索引器}
9、方法的委託:這是C#的特有的功能。
using System;namespace simpleDelegatePro{ delegate void MyDelegate(string s); class A { public void f (sting msg) { Console.WriteLine(msg); } public static void g (sting msg) { Console.WriteLine(msg); } } class B { public void h (MyDelegate m) { m("通過委託傳遞過來的是方法"+m.Method.Name+",這是調用該方法輸出的結果."); } } class Program { MyDelegate gd = new MyDelegate(A.g); // 此後,“gd” 與“A.g” 同等,同一個函數名 A a = new A(); MyDelegate fd = new MyDelegate(a.f); // 此後,“fd” 與“a.g” 同等,同一個函數名 gd("這裡是靜態方法A.g()的委託gd輸出的結果"); //等效於A.g("這裡是靜態方法A.g()的委託gd輸出的結果"); Console.WriteLine(""); fd("這裡是對象a的方法f()的委託fd輸出的結果"); //等效於a.f("這裡是對象a的方法f()的委託fd輸出的結果"); Console.WriteLine(""); B b = new B(); b.h(fd); //通過委託將方法a.f傳到方法b.h中 Console.ReadKey(); } }}
最終輸出的結果是:
這裡是靜態方法A.g()的委託gd輸出的結果
這裡是對象a的方法f()的委託fd輸出的結果
通過委託傳遞過來的是方法f,這是調用該方法輸出的結果.
委託的聲明:
屬性 修飾符 delegate 傳回型別 委託類型名(參數列表)
屬性、修飾符是可選項,可選的修飾符包括new public internal protected private
屬性列表和傳回型別共同決定了委託能過關連的一組方法。
委託的執行個體化:
委派物件 = new 委託類型(關聯方法);
委託的引用:
在建立委託後,通過引用該對象可以實現對其關聯方法的調用,簡而言之,就是把委派物件名當作方法名來使用。
委託的組合:
委託作為一種組合,它比C/C++中的函數指標的功能強得多,例如,委託可以做組合。
delegate string MyDelegate(int n);MyDelegate a,b,c,d;//在對a,b,c,d進行賦值後,可以進行下面的運算d = a + b + c; // 委託組合d = d - a ;
這時調用d就是調用其包含的所有委託,並將d的參數值傳遞給這些委託。如果關聯的方法具有傳回值,則組合的委託d返回委託列表中最後一個委託的傳回值。
10、命名空間
命名空間是C#中一個重要的概念,它為程式邏輯結構提供了一種組織方式。
命名空間的聲明:
namespace 命名空間名{ 命名空間成員;}
如果在一個命名空間中訪問另外一個命名空間的成員,需通過命名空間名實現: 命名空間名.命名空間成員
命名空間的匯入:
using 命名空間名; //相當於java的import
11、is & as
C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個對象的執行個體是否屬於特定的類型。
在Java中沒有與C#中的as操作符等價的操作符。as操作符與is操作符非常相似,但它更富有“進取心”:如果類型正確的話,as操作符會嘗試把被測試的對象引用轉換成目標類型;否則,它把變數引用設定成null。
比如:兩個類:A和B
B b = new B();
//不用as,進行強制轉換,如果類型不符,會引發轉換異常
A a = (A) b;
//使用as,類型不符,不會引發異常,會返回一個null,此時 a = null
A a = b as A;
12、attribute
http://www.cnblogs.com/-dawn/archive/2012/09/29/2708053.html
13、using
using在c#中有三種用法:
a、引用命名空間
b、建立別名:
e.g.:
using MSWord = Microsoft.Office.Interop.Word;
好處:避免繁瑣;解決同一個.cs檔案中引用不同命名空間但是類名有相同的問題。
c、強制資源管理
用途:清理非託管資源,不受GC控制的資源。Using結束後會隱式的調用Disposable方法。相當於調用了一個局部的子程式。
check:http://developer.51cto.com/art/201105/263550.htm
14、 List.AddRange 方法
將指定集合的元素添加到 List 的末尾。
命名空間:System.Collections.Generic
程式集:mscorlib(在 mscorlib.dll 中)
check:http://msdn.microsoft.com/zh-cn/library/z883w3dc(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-4