c#委托 个人学习理解总结

网上其实看了挺多关于委托的解释和教程代码说明的,看的迷迷糊糊,最后觉得没有遇到,最后还是没去认真看,但是近期有问题,写了写委托,然后会了,其实也还是基础。
链接1 链接2
在上面的链接中,张子阳(老师)的(第三条)可以看到委托的基本使用,但是其实对我来说,还是会有疑惑,这和直接调方法有啥区别,只是省了之前上面的if或者是switch判断罢了,因为都是在同一个界面(命名空间)里面写的,所以让人不是很好的理解(比如我),在这里,我的确还是没有理解,委托和调方法有啥区别。在链接2中我似乎理解了,后面的热水器的例子

举例

我看了很多文章,主要是,直接就告诉你委托应该怎么用,所以让我看的一脸懵(就是会写但是不知道怎么用),也有些恰好他们的举例和我自身遇到的问题不一致,所以收效甚微,我就举例我自己遇到的例子吧
假如A类提供数据,BCDEFG类接收数据,我遇到的情况是,B类(其他类都是这样)接收数据之后进行跳转(比如打开C类,也或者不跳转),然后C类再接收数据,其他类都不接收数据。
我因为使用的是winform,就用这个举例

个人开始思路

之前我的做法就是,BC…G类各自编号,如果出现有界面需要跳转,就返回需要跳转的编号,A类拿到编号就control.add 这个类,然后通过编号进switch,只调C类(假设后面需要接收的是C类)的对象方法给它传值,如果要跳转D类也是一样,如果有32个类(界面)需要来回跳转,那就要写32个case,其实看着还好?233333
这对我来说就是典型的思路,后面同事说,你这样不行,效率太低,不好维护以及调试bug找问题,于是就优化了一版,B类进行C类的初始化,以及C类的展示,首先是A类的数据静态化,static,然后每个类给个Timer,去监测A类的数据,当B类要跳转C类的时候,B类停掉自己的Timer,C类在构造方法(所有的类都是这样)里面写Timer启动方法,要跳转了就关掉自身的计时器,new 其他的类。
这个定时器是不是看着还行?就是timer用的有点多,用的多的话其实是容易卡顿的

委托

结合我之前的例子,A类一直是提供数据,那就是发布者,其他的类接收数据,那就是订阅者
A类中声明委托,然后实例化,再通过委托发布数据:

		//定义委托
        public delegate void DeGate_BtPageToggle(string clickkey);
        //使用委托
        public static DeGate_BtPageToggle DeGate_BtPageToge;
        //发布数据
        if (DeGate_BtPageToge!=null)
        {
            DeGate_BtPageToge("laF" + clickkey.ToString());
        }

其他类接收数据就行,如果需要跳转了就减掉自身,添加上要跳转类的委托

 public void PageToggle(string btname)
 {
 	if (btname=="laF1")
    {
        DianReBL bl = new DianReBL();
        MainForm.FooterPa.Controls.Clear();
        MainForm.FooterPa.Controls.Add(bl);
        MainForm.DeGate_BtPageToge -= this.PageToggle;
        MainForm.DeGate_BtPageToge += bl.PageToggle;
    }
    //做其他事
 }

委托其实我自己用下来其实感觉和用的timer差不多(形式上),要跳转了就关闭(-=),但是吧,并不是所有的C#平台都是有timer的吧,而且,背后的代码逻辑也不一样,我就,只会用🌚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值