C#语言基础-9 委托

委托
  当要把方法传送给其他方法时,需要使用委托。把方法当做参数传递。
  定义委托基本上是定义一个新类,所以可以在定义类的任何相同地方定义委托。
  委托的实例包含的方法,必须与委托的参数值、返回值类型相符
  语法定义: delegate 返回值类型 委托名称(参数类型 参数名);
    如 delegate void Show(int x);
    表示委托的实例方法是有1个int参数值并且返回void。

        //定义委托
        delegate void Show(Test t);
        static void Main(string[] args)
        {
            //使用委托
            Test t = new Test();
            Show show = new Show(ShowTest);
            show(t);

            //错误的例子  与委托的返回值不一样
            int x = 1;
            Show show1 = new Show(ShowTest1);
            show1(x);
            //错误的例子  与委托的参数值不一样
            Show show2 = new Show(ShowTest2);
            show1(x);
            Console.ReadKey();
        }

        static void ShowTest(Test t)
        {
            Console.WriteLine(t.X);
        }
        static string ShowTest1(Test t)
        {
            return t.X.ToString();
        }
        static void ShowTest2(int t)
        {
            Console.WriteLine(t);
        } 
        delegate string Show(Test t);
        static void Main(string[] args)
        {
            Test t = new Test();
            t.X = 1;
            Show show = new Show(ShowTest);

            ShowDelagate(show,t);
            Console.ReadKey();
        }
        static void ShowDelagate(Show action,Test t)
        {
            Console.WriteLine(action(t));
        }

        static string ShowTest(Test t)
        {
            return t.X.ToString();
        }

Action<T>和Func<T>委托
    泛型Action<T>委托表示引用一个void返回类型的方法。 因为这个委托类存在不同的变体,所以可以传递至多16种不同的参数类型。没有泛型参数的Action<T>类可调用没有参数的方法
    Func<T>允许调用带返回类型的方法。与Action<T>相似,Func<T>也定义了不同的变体,至多也可以传递16个参数类型和一个返回类型。

猜你喜欢

转载自www.cnblogs.com/liuxiansheng1024/p/12616357.html