C#事件

Posted 暖暖要坚持

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#事件相关的知识,希望对你有一定的参考价值。

C#事件:介绍委托和事件

 分别介绍:

 1:事件是特殊化的委托,委托是事件的基础。

     委托:使用委托可以将方法应用(不是方法)封装在委托对象内,然后将委托对象 传递给调用方法的代码,这样编译的时候代码就没有必要知道调用哪个方法。通过 使用委托程序能够在运行时动态的调用不供的方法。

             C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

     事件:事件是对象发送的消息,发送信号通知客户发生了操作。这个操作可能是由 鼠标单击引起的,也可能是由某些其他的程序逻辑触发的。事件的发送方不需要知 道那个对象或者方法接收它引发的事件,发送方只需知道在它和接收方之间存在的 中介(Deletgate)

2:在GUI图形界面中的事件(单击按钮或者选择菜单等)是已经定义好的事件,所需要 的就是注册事件。我们也可以自己定义声明事件,可以将自己定义的事件应用到程 序的任何地方。事件和委托是分不开的,c# 中使用委托来声明事件。 如果在类里面声明事件,那么必须先声明该事件的委托类型,也可以使用一个事先 已经声明好的委托类型

using System;
namespace SimpleEvent
{
   using System;

   public class EventTest
   {
      private int value;

      public delegate void NumManipulationHandler();   //委托

      public event NumManipulationHandler ChangeNum;   //由委托定义事件

      protected virtual void OnNumChanged()
      {
         if (ChangeNum != null)   
         {
            ChangeNum();
         }
         else
         {
            Console.WriteLine("Event fired!");
         }

      }
      public EventTest(int n )
      {
         SetValue(n);
      }
      public void SetValue(int n)
      {
         if (value != n)
         {
            value = n;
            OnNumChanged();
         }
      }
   }
   public class MainClass
   {
      public static void Main()
      {
         EventTest e = new EventTest(5);
         e.SetValue(7);
         e.SetValue(11);
         Console.ReadKey();
      }
   }
}

结果:

Event Fired!
Event Fired!
Event Fired!

以上是关于C#事件的主要内容,如果未能解决你的问题,请参考以下文章

C#委托-Delegate

C# 委托(Delegate)

C#事件与委托详解精华 多看看

通过IL分析C#中的委托事件FuncActionPredicate之间的区别与联系

C#委托(delegateActionFuncpredicate)和事件

C#委托