c#中的事件和委托

关于事件和委托一开始我也搞不明白到底咋回事。

我在平常使用到的有:

1、delegate

 a、这据说是委托,当用线程改变主界面的控件或什么的,就要用到这个,首先定义一个委托,加到主界面的方法中

delegate void Delegate(类型 参数);

private void main(类型 参数)
{

 if (!this.InvokeRequired)
{
   执行方法
}
else
{
   this.Invoke(new Delegate(main), new object[] {参数...});
}
}

b、delegate另一种用法,就是在另一个类中或界面里,要给主界面传值并执行方法。

主界面中定义delegate,

private delegate void Delegatem(类型 参数);
   private Delegatem  method(类型 参数);
private void exemethod(类型 参数)
{
}

然后 把主界面的呢方法加到刚才定义的委托上:

method= new Delegatem(exemethod);

当初始化另一个类时,就把刚才那个method传到另一个类里面。

在另一个类里使用时

void  othermethod(类型 参数)
  {
     main.Invoke(method, new Object[]{参数}); 
  }

main 是主界面。

2、EventHandler事件

 其实我一直不明白到底这是不是事件,用法是:

类A:

public class A
{
 private 类B b;
private voi main()
{
  b.eventtest1+=new EventHandler(method);
if(b.eventtest2!=null)
 b. eventtest2+= new EventHandler(method);
}
private voi method()
{}
} 

类B:

public class B
{
   public event EventHandler  eventtest1;
  public  EventHandler  eventtest2;
}

    大概用法就是这样,当让EventHandler  <类型>可以定义类型,以便传参数。

    之后做了几个项目,研究了c#编程,也看了很多别人对事件委托的解释。我理解的是事件是一个过程,就是一个主题受到了某种条件激发了另一个主题里的一个动作,让这个动作运行了。这个过程便是事件,它必须有两个主题,即事件激发者和事件接受者。那么这个过程怎么实现呢,时间激发者怎么去激发事件接受者呢,它们的中介就是委托。不比如按钮添加一个Click事件,button.Click+= new System.EventHandler(方法);这里的System.EventHandler就是一个委托,通过它完成了事件。当然System.EventHandler我们也可以自己写,比如用我们自己的委托

    public class MyButtonEvent : EventArgs
    {
        private string name;
        public MyButtonEvent(string buttonName)
        {
            this.name = buttonName;
        }

        public string Name
        {
            get { return name; }
        }
    }

这样,button.Click+= new MyButtonEvent (方法);就可以通过自己写的委托传button的名字过去,或者其它的相传的东西,只需改动MyButtonEvent就可以。

    而delegate是委托,它可以关联某个函数,使得你引用了它就引用了那个函数,实际起到的是代理的作用。而EventArgs表示的是包含事件的细节,通俗来说就是事件要用的数据。EventArgs其实就是一个委托的声明。还是那句话,事件通过委托完成的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值