• [C#]委托实例分析(附源码)


      一直都听说C#中的委托与事件非常重要,都没有什么切身的体会,而这次通过做一个WinForm二次开发的项目才真正感觉到了委托与事件的犀利之处。

    1.C#中的事件和委托的作用?
      事件代表一个组件能够被关注的一种信号,委托是可以把一个过程封装成变量进行传递并且执行的对象。
    2.他们之间的关系?
      委托是一种类型,事件是一种成员,就相当于public int Age {get;set;}这个属性中,int就是类型,Age是一个成员,public event EventHandler Push;这个事件中EventHandler就是委托类型,Push是事件,他是一个成员。
      事件从本质上来说是委托,不过在使用上比委托多了一个限制:事件只能在定义事件的类内部被调用,而委托可以在任意方法中被调用(难就难在理解这句)。
      我们基本上可以说:事件是委托,委托是方法指针,在调用委托的时候跟调用方法是一样的。一般来说,这个限制正好用在封装组件类的时候体现了封装特性。
    3.和什么情况使用委托和事件?
      事件是组件中的抽象概念,同样包括状态和操作也是组件中的概念,对应到C#里面就是属性和方法。所以像控件之类的组件都会有事件。而委托代表一个代码的执行过程,C#3.0引入linq以后,用的就非常频繁了。
    4.但是用事件的方式来调用的话有什么好处?
      事件是一种封装,就好像属性会封装字段一样,可以把定义和实现隔离开来,给你举个例子就是DateTime实际上你看那么多属性,其实里面只有一个字段存储时间,各种日期啊年啊属性都是根据这个时间算出来的。事件也把内部类型为一个委托的字段封装起来,这样在类的外部就只能使用事件来注册或者注销事件关注,而不能引发事件。


    实例:  我们要达到这样的效果:
      

    就是点击Form3中的数字选框时使Form1中的文本框联动
    那么可以使用委托来完成:
    第一步:在Form3.cs中定义委托与事件:
            //定义带参数的委托与两个事件
            //这是委托与事件的第一步
            public delegate void Form2Handle(string s);
            public event Form2Handle changed;    
    

     第二步:在Form1.cs中将方法注册到委托上:

            //改变值的事件
            private void changed(string s)
            {
                //此处是给原有窗体中控件赋值
                this.textBox1.Text = s + s;
            }
            private void button2_Click(object sender, EventArgs e)
            {
                Form3 frm3 = new Form3();
                //这是委托与事件的第二步,
                //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件
                frm3.changed += new Form3.Form2Handle(changed);//改变值的事件
                frm3.ShowDialog();
            }        
    

      第三步:在Form3.cs中使用委托:

                //这是委托与事件的第三步
                //传值
                changed(numericUpDown1.Value.ToString());    
    代码下载:委托与事件实例.rar
     
  • 相关阅读:
    C++:变量声明和定义的关系
    Docker 方式搭建 zookeeper + kafka 集群
    Centos7.6系统下docker的安装
    CentOS7服务器下安装配置SSL
    《深入浅出密码学》|ing
    车联网入侵检测技术(持续更新)
    Hive的安装及交互方式
    Centos7中安装MySQL5.7记录
    Zookeeper-分布式锁代码实现
    【Java】String字符串的最大长度
  • 原文地址:https://www.cnblogs.com/huxiaolin/p/4156514.html
Copyright © 2020-2023  润新知