事件(Event)編程
事件是一種對象或類可以提供通知的成員,客戶端能夠經過提供事件處理程序爲相應的事件可添加可執行代碼,事件能夠理解爲一種特殊的委託。函數式編程
委託(Delegate)函數
委託是存有對某個方法的引用的一種引用類型變量。引用可在運行時被改變。C#中的委託相似於C、C++中的函數指針。spa
委託(Delegate)特別用於實現事件和回調方法。全部的委託(Delegate)都派生自 System.Delegate 類。指針
//委託的聲明、實例化和使用,該委託可用於引用帶有一個整型參數的方法,並返回一個整型值。 using System; delegate int NumberChanger(int n); namespace DelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { // 建立委託實例 NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); // 使用委託對象調用方法 nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
多播委託code
委託對象可以使用 "+" 運算符進行合併。一個合併委託調用它所合併的兩個委託。只有相同類型的委託可被合併。"-" 運算符可用於從合併的委託中移除組件委託。對象
使用委託的這個有用的特色,能夠建立一個委託被調用時要調用的方法的調用列表。這被稱爲委託的 多播(multicasting),也叫組播。blog
泛型(Generic)委託接口
using System; using System.Collections.Generic; delegate T NumberChanger<T>(T n); namespace GenericDelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { // 建立委託實例 NumberChanger<int> nc1 = new NumberChanger<int>(AddNum); NumberChanger<int> nc2 = new NumberChanger<int>(MultNum); // 使用委託對象調用方法 nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
action<T>和func<t>委託隊列
Action<T>是沒有返回值得方法委託,Func<T>是有返回值的委託。返回值的類型,由泛型中定義的類型進行約束。
集合(Collection)
集合(Collection)類是專門用於數據存儲和檢索的類。
這些類提供了對棧(stack)、隊列(queue)、列表(list)和哈希表(hash table)的支持。大多數集合類實現了相同的接口。
經常使用的集合類有ArrayList(非泛型集合)、List(泛型集合)、HashTable(非泛型集合)、Dictionary(泛型集合)、
Queue(隊列,表明一個先進先出的對象集合)和Stack(堆棧,表明一個後進先出的對象集合)、SortedList(泛型集合)
匿名方法(Anonymous methods)
提供了一種傳遞代碼塊做爲委託參數的技術。匿名方法是沒有名稱只有主體的方法。
在匿名方法中不須要指定返回類型,它是從方法主體內的 return 語句推斷的。
Lambda表達式
Lambda表達式是一個匿名函數,是一種高效的相似於函數式編程的表達式,Lambda簡化了開發中須要編寫的代碼量。
它能夠包含表達式和語句,而且可用於建立委託或表達式目錄樹類型,支持帶有可綁定到委託或表達式樹的輸入參數的內聯表達式。
C#的Lambda 表達式都使用 Lambda 運算符 =>,該運算符讀爲「goes to」。語法以下: