如何写触发事件:

如何写触发事件:
 

第一步你要明白什么是委托:

public class test
{
       public delegate void del(string message); //声明一个委托
       public static void entrust(string message)//声明一个委托方法,注意他的签名(返回值和参数个数参数类型)要正确
       {//这是个静态方法
           System.Console.Write(message); //该方法只是来显示一个字符串
       }
       public static void methodshow(int a, del ent)     //这里将委托对象做为一个参数
       {
           ent("这是:"+a+"\n"); //使用委托方法来现实文字
       }
       static void Main()
       {
           del handler = entrust;     //实例化一个委托(好像也叫注册一个委托 前面是del声明的委托后面跟委托方法)(静态方法)
          // 对象中具有与委托签名相匹配的方法,委托就可以引用该对象
           //所以我们可以给不同的对象注册不的委托方法

           handler("hello\n");     //使用委托

           methodshow(3, handler);

           Methodclass Method = new Methodclass(); //实例一个对象
           del handler2 = Method.Method1; //使用methodclass类里面的方法来注册这个委托(实例方法)
           handler2("Asd");
           System.Console.Write(handler2.GetInvocationList()+"\n");//查找派生与那个类
           //显示委托创建对象属于delegate类也就可以使用delgate类的属性

       }
}

public class Methodclass      //这是为了试验委托可一调用别的类中方法,而不只是静态方法
{
       public void Method1(string message) {
           System.Console.Write("这里调用的是一个任意方法"+message+"\n");
       }
}

委托函数就是为了管理方法存在的。如你只有一个方法你可以使用匿名方法来注册事件

第二步:开始写触发代码了:

using System;
public delegate void del(string message); //声明一个委托
public class test
{
     public static void Method(string message)
     {
         Console.Write(message);
     }
     public event del eventname; // 声明一个事件并指向委托类型(del)
     //事件就是用了激活委托,然后委托就调用适合他的方法
     public void oneventname(string message)   //这是定义触发事件函数
     {//里面的参数要和委托里面参数类型和个数一致
         if (eventname != null)
         {//这里用这个是因为确保委托原形不为delete不为null
            //也就是没注册时间就不触发了。
             eventname(message);
         }
     }
}
public class test2
{
     public static void Main()
     {
         test mm = new test();
         mm.eventname += new del(test.Method); //通过委托将test.Method方法 注册到事件中
         //移除事件mm.eventname -= new del(test.Method);
         //接下来就是如何触发这个事件了,只要事件触发就会调用test.Method()方法来显示一个字符串
         mm.oneventname("hello");

     }
}

下面在看下匿名方法:

using System;
public delegate void del(string message); //声明一个委托
public class test
{
      public static void Method(string message)
      {
          Console.Write(message);
      }
      public event del eventname; // 声明一个事件并指向委托类型(del)
      //事件就是用了激活委托,然后委托就调用适合他的方法
      public void oneventname(string message)    //这是定义触发事件函数
      {//里面的参数要和委托里面参数类型和个一致
          //因为最后还要是传值给他的
          eventname(message);
          //事件只能在类里面写好触发函数,否则在外面不可用
      }
}
public class test2
{
      public static void Main()
      {
          test mm = new test();
          mm.eventname += delegate(string message) { Console.Write(message); };
          //这是一个匿名方法,没用到委托所以算匿名了
          mm.oneventname("你好\n");
      }
}

原文地址:https://www.cnblogs.com/shylock/p/1334199.html