委托


定义委托,相当于自定义委托声明的类。

委托可看出是一个函数的“容器”,将某一函数装入后,可把委托当作函数一样使用。

例一:

using System;

namespace Delegate0
{

    //可以将方法动态的赋给参数,可避免在程序中大量使用if-else,或Switch语句。有更好灵活性和可扩展性。
    public class operclass
    {
        //定义委托,注意委托的参数类型和返回值类型;参数类型为int,返回值类型为int;
        //相当于自定义类,其生成的对象可以生成一切委托类型的函数名。
        public delegate int Mydelegate(int x, int y);

        //任何参数类型为两个int,返回值为int的函数名,都可作为第三个参数的实参
        public int oper(int x, int y, Mydelegate mydelegate)
        {
            return mydelegate(x, y);
        }
        public int add(int x, int y) //两数相加方法
        {
            return x + y;
        }
        public int sub(int x, int y) //两数相加方法
        {
            return x - y;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            operclass myoperclass = new operclass();
            Console.WriteLine("1+1={0}", myoperclass.oper(1, 1, myoperclass.add));
            Console.WriteLine("1-1={0}",myoperclass.oper(1,1,myoperclass.sub));
        }
    }
}

输出:

add10

例二:

using System;
public delegate void greet(string s);//定义委托
public class greetclass
{
    public greet greetdelegate;//实例化委托
    public void Englisgreet(string name)
    {
        Console.WriteLine("Hello"+name);
    }
    public void Chinesegreet(string name)
    {
        Console.WriteLine("你好"+name);
    }
    public void greeting()
    {
        if (greetdelegate!=null)//绑定委托,则因此句触发。
        {
            greetdelegate("张三");
        }
    }
}
public class main
{
    static void Main(string[] args)
    {
        greetclass greetclass = new greetclass();
        greetclass.greetdelegate = greetclass.Englisgreet;
        greetclass.greetdelegate = new greet(greetclass.Chinesegreet);//重新实例化委托greet
        greetclass.greetdelegate += greetclass.Englisgreet;
        greetclass.greetdelegate += greetclass.Chinesegreet;
        greetclass.greetdelegate("hhhhhhhhhhhhhhhhh");
        greetclass.greeting();
    }
}

文章作者: 李世昱
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 李世昱 !
评论
  目录