C# 委托和事件
来源:互联网 发布:软件发信息 编辑:程序博客网 时间:2024/06/11 18:29
C# 委托和事件
1.方法作为函数参数时使用委托作为其类型的声明
namespace normal{ public class test { public delegate void SimpleDelegate(string m); public void ShowMessage(string message) { Console.WriteLine(message); } public void UseDelegate(string message, SimpleDelegate showMessage) { showMessage(message); } } class Program { static void Main(string[] args) { test t = new test(); t.UseDelegate("Delegate run!", t.ShowMessage); Console.ReadKey(); } }}
2.方法绑定到委托
namespace normal{ public class test { public delegate void SimpleDelegate(string m); public void ShowMessage(string message) { Console.WriteLine("Message:" + message); } public void ShowTime(string time) { Console.WriteLine("Time:" + time); } public void UseDelegate(string message, SimpleDelegate showMessage) { showMessage(message); } } class Program { static void Main(string[] args) { test t = new test(); test.SimpleDelegate d, d1, d2; d1 = t.ShowMessage;//绑定方法 d2 = t.ShowTime; t.UseDelegate("Delegate run!", d1); t.UseDelegate(System.DateTime.Now.ToShortTimeString(), d2); d = t.ShowMessage;//绑定多个方法,第一个方法必须用"="号赋值,后续方法用"+=" d += t.ShowTime; t.UseDelegate("Delegate run!", d);//多个方法按照添加的顺序执行 d -= t.ShowMessage;//去除某个方法 t.UseDelegate("Delegate run!", d); d("Direct use!");//直接调用 Console.ReadKey(); } }}/* OutputMessage:Delegate run!Time:18:35Message:Delegate run!Time:Delegate run!Time:Delegate run!Time:Direct use!*/
3.事件声明与绑定
namespace normal{ public class test { public event SimpleDelegate EVENT; public delegate void SimpleDelegate(string m); public void ShowMessage(string message) { Console.WriteLine("Message:" + message); } public void ShowTime(string time) { Console.WriteLine("Time:" + time); } public void UseDelegate(string message) { EVENT(message); } } class Program { static void Main(string[] args) { test t = new test(); t.EVENT += t.ShowMessage; t.EVENT += t.ShowTime; t.UseDelegate("Event run!"); Console.ReadKey(); } }}
事件使用委托来声明。
事件只能用”+= / -=”赋值。
它封装了委托类型的变量,使得在类的内部,不管你声明它是public还是protected,它总是private的。
声明一个事件类似于声明一个进行了封装的委托类型的变量。
4. .Net Framework中的委托与事件
委托类型的名称以EventHandler结束
委托类型的参数有两个分别是(object sender, EventArgs e)
参数EventArgs也可以是该类型的继承类
事件的命名是委托名称去掉EventHandler的部分
继承EventArgs的类名称以EventArgs结尾
namespace normal{ class test { public string s = "I'm in test class!"; public delegate void ShowEventHandler(object sender, ShowEventArgs e); public event ShowEventHandler Show; public class ShowEventArgs : EventArgs { public readonly char s; public ShowEventArgs(char param) { s = param; } } public void WaitMessage() { char ch = 'A'; for (int i = 0; i < 10; i++) { Show(this, new ShowEventArgs(ch++)); Thread.Sleep(500); } } } class Display { public void ShowMessage(object sender, test.ShowEventArgs e) { test t = (test)sender; Console.WriteLine(t.s + "\n" + e.s); } } class Program { static void Main(string[] args) { test t = new test(); t.Show += (new Display()).ShowMessage; t.WaitMessage(); Console.ReadKey(); } }}/* OutputI'm in test class!AI'm in test class!BI'm in test class!CI'm in test class!DI'm in test class!EI'm in test class!FI'm in test class!GI'm in test class!HI'm in test class!II'm in test class!J*/
阅读全文
0 0
- c# 委托和委托事件
- C# 委托和事件
- c# 委托 和 事件
- c#委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- C# 委托和事件
- C#事件和委托
- C# 委托和事件
- C# 委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- c#委托和事件
- c#委托和事件
- C#委托和事件
- C# 委托和事件
- P(2~16)进制的乘法表
- Linux基础
- B树、B-树、B+树、B*树
- 2017.05.20【usaco2017_Mar Bronze & Silver】C组题解
- @RequestBody应用,requestbody
- C# 委托和事件
- Hibernate核心API详解
- Spring AOP小例子
- Linux常用命令介绍(帮助命令及重要的热键)
- 计算机网络笔记:OSI七层模型与TCP/IP四层模型
- android砖头之:快递即时查询
- 浅谈水浒(二)
- 生物芯片
- ACM-搜索-06