首页 > 其他 > 详细

委托与事件学习笔记

时间:2019-01-11 17:01:04      阅读:191      评论:0      收藏:0      [点我收藏+]

参考并抄袭这两篇博客:

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 }

 

委托与事件学习笔记

原文:https://www.cnblogs.com/blueGao/p/10255705.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!