zoukankan      html  css  js  c++  java
  • 委托与事件学习笔记

    参考并抄袭这两篇博客:

    https://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html

    http://www.cnblogs.com/landeanfen/p/4642848.html

    1、委托

     1 //1、定义委托
     2 //    根据委托的使用方式可视情况更改返回类型和添加输入参数
     3  public delegete void EventHandler();
     4 //2、定义方法  
     5 //    这里方法没有返回值,如有返回值的话应修改委托的返回类型
     6     public void Fun1()
     7 {
     8      Console.WriteLine("我是添加到委托里的方法1");
     9 }
    10     public void Fun2()
    11 {
    12      Console.WriteLine("我是添加到委托里的方法2");
    13 }
    14 
    15 //3、将方法添加进委托中
    16 EventHandler eventHandler=new EventHandler(Fun1);//简写为EventHandler eventHandler=Fun1;
    17 eventHandler+=Fun2;
    18 //运行委托
    19 eventHandler();

     自定义委托有点麻烦,又看到C#里面Func类型的委托可用于处理有参数有返回值的方法

     1         //无参数有返回值
     2         private static object Test3()
     3         {
     4             Console.WriteLine("Func Test3, Parameter");
     5             return Guid.NewGuid().ToString();
     6         }
     7 
     8         //有参数有返回值
     9         private static object Test4(string strRes)
    10         {
    11             Console.WriteLine("Func Test4,  Parameter and Return Value");
    12             return strRes;
    13 } 14 static void Main(string[] args) 15 { 16 var oFunc1 = new Func<object>(Test3); 17 var ofuncRes1 = oFunc1.Invoke(); 18 var oFunc2 = new Func<string, object>(Test4); 19        var ofuncRes2 =oFunc2("a");
    20    }
     

     具体使用的话,看了大神的实际使用样式,需要以后慢慢琢磨。

    2、事件的使用

    事件差不多就是特殊的委托。

    事件重要事项:

    触发事件:调用(Invoke)事件的术语。当事件被触发时,所有注册到他的方法都会被依次调用。

    发布者(Publish):让事件被其他类或结构可见并使用的类或结构。

    订阅者(subscriber):把事件和发布者关联注册的类和结构

    事件处理程序:注册到时间的方法。

    实例:

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Publisher publisher = new Publisher();
     6             Console.Write("请输入要发布的杂志:");
     7             string name = Console.ReadLine();
     8             if(name=="男人装")
     9             {
    10                 publisher.Publish += MrGao.Receive;
    11                 publisher.issue("男人装出版啦!");
    12             }            
    13             Console.ReadKey();
    14         }
    15     }
        //发布者类
    16 public class Publisher 17 { 18 public delegate void EventHandler(object sender,PubEventArgs e); 19 public event EventHandler Publish; 20 21 protected virtual void OnPublish(PubEventArgs e) 22 { 23 if(Publish!=null) 24 { 25 this.Publish(this, e); 26 } 27 } 28 public void issue(string magazineName) 29 { 30 OnPublish(new PubEventArgs(magazineName)); 31 } 32 }

        //订阅者类
    33 public class MrGao 34 { 35 public static void Receive(object sender,PubEventArgs e) 36 { 37 Console.WriteLine("订阅者收到发布内容!发布内容为:{0}",e.magazineName); 38 } 39 } 40 41 public class PubEventArgs:EventArgs 42 { 43 public readonly string magazineName; 44 public PubEventArgs() 45 { 46 } 47 public PubEventArgs(string magazineName) 48 { 49 this.magazineName = magazineName; 50 } 51 }
  • 相关阅读:
    set-find
    set-equal_range
    set-equal_range
    set-erase
    php 抽象类 静态 单体设计模式
    Servlet 工作原理解析
    职场上一个人情商高的十种表现
    快速学习一门新技术入门
    php中14中排序方式的实现
    php中对Mysql数据库的访问操作
  • 原文地址:https://www.cnblogs.com/blueGao/p/10255705.html
Copyright © 2011-2022 走看看