摸了一下C#的委托事件,用自己的理解描述一遍

看了一些资料,有些讲的太术语话,在委托和事件转来转去中,按我个人的理解,把他描述一遍,可能不够准确。

委托就好像将一个很他形状一样的函数装进他里面去,当出项很多函数函数签名,参数一样时,就可以使用委托来决定使用哪个函数,我把他看做是一个类中类或是对象中对象这样子。

比如 public  delegate void message(connection sender,messageArg e);

可以通过 _message=new message(某个函数名)来调用某个函数

使用时 就_message(参数名)来使用

事件,我今天想了一下 ,什么时候会使用事件,按下某个按钮就会发生反应时最典型的事件了,如果换其他场景,我们自定义事件的话,跟使用线程和标准的函数应用应该只是异曲同工吧。

不说了,看委托和事件如何结合吧。

先声明一个委托,因为事件的应用要和位图绑定在一起,所以先把老大找出来。public  delegate void message(connection sender,messageArg e);

在以这个声明为基础,个人可以认为他是类。然后声明一个事件,关键字event说明他是事件,public event message messageA;

将二者绑定起来messageA += new message(mc.display);

产生一个事件messageA(this,new messageArg("test"));

三部曲完成委托与事件的结合使用,以下是具体的例子。

namespace Test
{
    public class messageArg:EventArgs
    {
        private string m;
        public string M {
            get {
                return m;
            }
            set {
                m = value;
            }
        }
        public messageArg() {
            m = null;
        }
        public messageArg(string s)
        {
            m = s;
        }
    }

namespace Test
{
    public  delegate void message(connection sender,messageArg e);

   public  class connection
    {
        public event message messageA;
        private string name;
        public string Name {
            get {
                return name;
            }
            set {
                name = value;
            }
        }
        public connection() {
            name = null;
        }
        public connection(string s) {
            name = s;
        }
        public void run() {
            messageA(this,new messageArg("test"));
       
        }
        public void display(connection c, messageArg e) {
            Console.WriteLine("the name of this object is {0},the message is {1}",c.Name,e.M);
        }
       

    }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            connection mc = new connection("first");
            connection mmc=new connection("second");
            mc.messageA += new message(mc.display);//将委托与事件绑定起来
            mc.run();//产生一个事件
            mmc.messageA += new message(mmc.display);
            mmc.run();

        }
    }
}

你会发现display这个函数所需要的东西,和run这个函数产生的事件是紧密结合,可以找得到答案的,这就是所谓的绑定吧。顺便说一下,是因为他们都在同个对象才用this的吧,个人看法,客观看待。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值