【C#】C#中的delegate和event应用

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading;
using  System.Threading.Tasks;
 
namespace  ConsoleApplication34
{
     class  Program
     {
         static  void  Main( string [] args)
         {
             Heater h =  new  Heater();
             alertM a =  new  alertM();
            
             h.BoilEvent += a.AM;
 
             h.Boiled();
 
             Console.ReadLine();
         }
     }
 
     public  delegate  void  BoilHandler( object  sender,BoilEventArgs e);
 
     public  class  Heater
     {
         public  int  temperature;
         public  event  BoilHandler BoilEvent;
         public  void  Boiled()
         {
             for  ( int  i = 0; i <= 100; i++)
             {
                 temperature = i;
                 
                 
 
                 if  (temperature > 95)
                 {
                     
                     BoilEvent( this new  BoilEventArgs(temperature));
 
                     Thread.Sleep(2000);
                 }
             }
 
             
         }
     }
 
     public  class  alertM
     {
         public  void  AM( object  sender,BoilEventArgs e)
         {
             Console.WriteLine( "水马上就要开了" +e.temperature);
         }
     }
 
     public  class  BoilEventArgs : EventArgs
     {
         public  int  temperature;
         public  BoilEventArgs( int  param)
         {
             temperature = param;
         }
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
 
namespace  ConsoleApplication35
{
     class  Program
     {
         static  void  Main( string [] args)
         {
             List<User> list1 =  new  List<User>();
             User u1 =  new  User( "Daniel" );
             User u2 =  new  User( "Acadia" );
             User u3 =  new  User( "Johnes" );
             list1.Add( new  User( "Daniel" ));
             list1.Add(u2);
             list1.Add(u3);
 
 
             ChangeName cn =  new  ChangeName(list1);
             cn.RenameEvent += cn.RE;
 
             cn.Rename( "testtest" , 2);
 
 
             Console.ReadLine();
         }
     }
     
     public  class  User
     {
         public  string  Name;
         public  User( string  name)
         {
             Name = name;
 
         }
     }
 
     public  class  ChangeName
     {
         List<User> listuser;
         public  delegate  void  RenameHandler( object  sender, RenameEventArgs e);
         public  event  RenameHandler RenameEvent;
         public  ChangeName(List<User> list)
         {
             listuser = list;
         }
 
         public  void  Rename( string  NewName, int  i)
         {
             if  (i < listuser.Count && i>0)
             {
                 string  OldName = listuser[i].Name;
                 listuser[i].Name = NewName;
                 RenameEvent( this new  RenameEventArgs(OldName,NewName,i));
             }
         }
 
         public  void  RE( object  sender,RenameEventArgs e)
         {
             Console.WriteLine( "第"  + e.Order+ "项,用户名称已经由"  + e.OldName +  "改为了 "  + e.NewName);
         }
     }
 
     public  class  RenameEventArgs : EventArgs
     {
         public  string  NewName;
         public  string  OldName;
         public  int  Order;
         public  RenameEventArgs( string  Oldparam, string  Newparam, int  i)
         {
             OldName = Oldparam;
             NewName = Newparam;
             Order = i;
         }
     }
 
}


备注:事件委托要放在事件发生的前面,如下:

            h.BoilEvent += a.AM;

            h.Boiled(); 


参考链接:

关于事件和委托,这篇写的太好了:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html#undefined


http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html


      本文转自daniel8294 51CTO博客,原文链接:http://blog.51cto.com/acadia627/1922638,如需转载请自行联系原作者




相关文章
|
1月前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
55 3
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
37 3
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
62 1
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
18 0
|
6月前
|
C#
C#||应用框体设计计算器
C#||应用框体设计计算器
|
3月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
65 2
|
3月前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
367 8
|
2月前
|
消息中间件 网络协议 安全
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
161 0
|
3月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
52 8
|
2月前
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
68 0