C# 基础16 Delegate 委托

委托

 委托也叫代理,就是把事情交付给别人去办。委托是具有相同弄个签名和返回值类型的有序方法列表。

!委托定义了方法的类型,使得可以把方法当做另一个方法的参数来进行传递!

委托是一种引用类型,方法的列表称为调用列表,当委托被调用时,它调用列表中的每个方法。

委托是方法的抽象,它存储的就是一系列具有相同签名和返回值类型的方法的地址/引用。

定义

语法格式:访问修饰符   delegate 返回类型  标识符(参数列表); 

实例与赋值

 声明实例的语法格式:委托类型 标识符;

对委托赋值语法格式:标识符=方法;

多播委托:

标识符+=方法(向委托上绑定方法)

标识符-=方法(解除委托上的方法)

注意事项

 1.委托和要代理的方法必须有相同的返回类型和参数

2.委托调用过程中的协变与抗变!   不会!!!!

3.命名规范:委托标识符以EventHandle结尾。(无所谓)

委托实现

一、声明委托

二、声明对象

三、绑定方法

四、调用委托

方法一:

 方法一:同类中用委托
class Program    
    {
        public delegate void Del(string a);          //1. 声明委托
        static void Main(string[] args)
        {
            Del del;                                 //2.声明实例
            del = FF;                                //3.绑定方法
            del("qwe");                              //4.调用委托
            Console.ReadKey();
        }
        static public void FF(string a)              //2.参数要和委托相同(在声明实例之后就
        {                                            //创建新方法,新方法参数必须与委托参数相同
            Console.WriteLine("方法一");
        }
    }

方法二:

方法二: 上面强调的重点   使用委托可以将方法作为参数进行传递
class Program
    {
        public delegate void Del(string a);               //1. 声明委托
        static void Main(string[] args)
        {
            F(FF);                                         //4.传参时绑定方法(使方法作为
                                                           //参数传递)
            Console.ReadKey();
        }
        static void F(Del del)                             //2.声明实例(作为参数)
        {
            del("qwe");                                    //3.调用委托!实参要写
            Console.WriteLine("后输出");
        }
        static void FF(string c)                           //2.方法参数要和委托一样  然后用
        {                                                  //  这个方法做上一个方法的参数
            Console.WriteLine("先输出");
        }
    }

方法三:

方法三:在不同类中使用委托,委托绑定方法时可以加绑  也可以解绑   操作更灵活
 class Program
    {
        static void Main(string[] args)
        {
            C1 c1 = new C1();C2 c2 = new C2();
            c2.del += c1.F1;                             //3.绑定方法
            c2.del += c1.F2;
            c2.del += c1.F3;
            c2.del("呵呵4");                              //4.调用委托
            Console.ReadKey();
        }
    }
    class C1
    {
        public void F1(string a)                          //  2.5  方法中的参数一定要对应委
                                                          //       托中的参数
        {
            Console.WriteLine("哈哈1");
        }
        public void F2(string b)
        {
            Console.WriteLine("哈哈2");
        }
        public void F3(string c)
        {
            Console.WriteLine("哈哈3");
        }
    }
    class C2
    {
        public delegate void Del(string a);              //1. 声明委托
        public Del del;                                  //2.声明实例
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值