看到大家的留言,我想說下我對委托的了解,首先看它的定義:
委托 就是將方法作為方法的參數
不用先看例子什么的,你就多品味品味這句話,然后你看下使用委托的步驟,
1.定義一個委托
2.注冊該委托
3.使用委托
Ok就這么簡單,其實委托就像大家常說的那樣:
它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委托和事件就覺得心里憋得慌,渾身不自在
其實不用怕,你就按著這三步來標準沒錯,下面來個小例子:
第一步:定義委托
public delegate void GreetingDelegate(string name);
第二步:注冊委托
這里先定義一個方法
private static void ChineseGreeting(string name) { Console.WriteLine("早上好, " + name); }
然后注冊
GreetingDelegate delegate1+ =ChineseGreeting;
第三步:使用委托
delegate1("houhou");
OK,委托完成,其實不要怕,委托真的很簡單……
下面介紹幾個已定義好的委托
1.Action Action是無返回值的泛型委托。
static void Main(string[] args) { Test<string>(Action,"Hello World!"); Test<int>(Action, 1000); Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表達式定義委托 Console.ReadKey(); } public static void Test<T>(Action<T> action, T p) { action(p); } private static void Action(string s) { Console.WriteLine(s); } private static void Action(int s) { Console.WriteLine(s); }
可以使用 Action<T1, T2, T3, T4> 委托以參數形式傳遞方法,而不用顯式聲明自定義的委托。 封裝的方法必須與此委托定義的方法簽名相對應。 也就是說,封裝的方法必須具有四個均通過值傳遞給它的參數,并且不能返回值。 (在 C# 中,該方法必須返回 void)通常,這種方法用于執行某個操作。
2.Func的使用
static void Main(string[] args) { Console.WriteLine(Test<int,int>(Fun,100,200)); Console.ReadKey(); } public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b) { return func(a, b); } private static int Fun(int a, int b) { return a + b; }
Func是有返回值的泛型委托
3.predicate 是返回bool型的泛型委托泛型委托:表示定義一組條件并確定指定對象是否符合這些條件的方法。此委托由 Array 和 List 類的幾種方法使用,用于在集合中搜索元素。
static void Main(string[] args) { Point[] points = { new Point(100, 200), new Point(150, 250), new Point(250, 375), new Point(275, 395), new Point(295, 450) }; Point first = Array.Find(points, ProductGT10); Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y); Console.ReadKey(); } private static bool ProductGT10(Point p) { if (p.X * p.Y > 100000) { return true; } else { return false; } }
使用帶有 Array.Find 方法的 Predicate 委托搜索 Point 結構的數組。如果 X 和 Y 字段的乘積大于 100,000,此委托表示的方法 ProductGT10 將返回 true。Find 方法為數組的每個元素調用此委托,在符合測試條件的第一個點處停止。
文章列表