委托的概念、定义

一、委托的概念

我们可以把 方法比作具体任务,委托就是一个任务的标准,只要符合这个标准的任务,都能给这个标准去处理 。

给个例子

在比如说 委托等于吃饭 ,具体方法是吃鱼 、喝汤  等等

1. 我们可以把 吃饭 =吃鱼 

那么我们调用 吃饭 就会吃鱼

2. 我们可以把

吃饭=吃鱼

吃饭+=喝汤

那吃饭就等于 吃鱼+喝汤


二、声名委托

委托与方法非常相近

//声名的委托
public delegate void GreetingDelegate(int x, int y);

//声名的方法
public Void  GreetingDelegate(int x,int y)
{
  //可以有实现
}

1.1 与方法的共同点:

  1. 有参数类型

  2. 有返回类型

  3. 有名称和修饰符

1.2 与方法的不同点:

区别public后面加了一个delegate

  1. 没有具体实现 

  2.委托可以和类是一个级别 ,但是方法只能声名在类内部

1.3 定义的方式

定义一个委托类WriteMethod,那么WriteMethod就是一个委托对象,也可以是理解了一个类型

 public delegate void WriteMethod(string x);

可以在类的内部,也可以在类的外部,与类级别是一样的


三、使用委托

用委托我们需声名一个委托类型的变量,通过这个变量我们才能使用委托

 //声名的委托
 public delegate void WriteMethod(string x);
 
 //我们可以在方法里面定一个委托类型的变量
  WriteMethod  变量;
  
  //通过变量使用委托
  变量=MethodA;//那么变量就等于了MethodA方法


总共3种给变量赋值方法:

  WriteMethod  变量=null;
  变量 = 一个和委托格式一样参数的方法
  变量 =new MyDel (一个和委托格式一样参数的方法);
  //比如小张接了一个任务A,那么小张还可以在接一个任务B,那么小张一次就可以执行2个任务
  变量 += 继续追加方法


实用案例

    //B类中定义一个1个参数的委托
    //定义一个Program和定义一个B类
    //Program 定义一个输出方法,执行B类的一个方法把Program 方法一起执行
    public class Program
    {
        public static  void Main()
        {
            while (true)
            {
                B m = new B();
                m.delegate1 = MethodA;//也可以new 
                m.delegate1 += MethodB;
                string str = Console.ReadLine();
                m.Run(str);
                //Console.ReadLine();
            }
        }
        public static  void MethodA(string x)
        {
            Console.WriteLine("执行方法A成功"+x);
        }
        public static void MethodB(string x)
        {
            Console.WriteLine("执行方法B成功"+x);
        }
    }
    public class B
    {
        public delegate void WriteMethod(string x);
        public WriteMethod delegate1;
        public void Run(string x)
        {
            Console.WriteLine("开始执行委托:");
            delegate1(x);
        }
    }

我们调用了 Run方法 会输:

 执行方法A 

 执行方法B

 

文档:委托