zoukankan      html  css  js  c++  java
  • 如何写触发事件:

    如何写触发事件:
     

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

    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");
          }
    }

  • 相关阅读:
    C#单纯的字母数字ASCII码转换
    解析类型后加问号和双问号
    【转】composer autoload 自动加载性能优化指南
    【转】Laravel 三种中间件作用讲解
    【转】Laravel belongsTo 详解
    【转】docker-compose详解
    【转】laravel之Artisan命令操作Artisan Console
    【转】Shell中>/dev/null 2>&1 详解
    【转】docker-entrypoint.sh 文件的用处
    【转】解决Debian下sudo命令unable to initialize PAM问题
  • 原文地址:https://www.cnblogs.com/shylock/p/1334199.html
Copyright © 2011-2022 走看看