文章出處

看到大家的留言,我想說下我對委托的了解,首先看它的定義:

委托 就是將方法作為方法的參數

不用先看例子什么的,你就多品味品味這句話,然后你看下使用委托的步驟,

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 方法為數組的每個元素調用此委托,在符合測試條件的第一個點處停止。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()