C#事件和委托
来源:互联网 发布:情侣头像 知乎 编辑:程序博客网 时间:2024/05/29 02:40
事件和委托经常连在一起说,然后就不知道他们两个具体有什么区别了。今天特意在网上搜了一下,把收集的一点资料整理一下,以防自己忘记了。
1. 委托在C#中其实也是一个类,用反编译工具可看到委托是System.MulticastDelegate的子类,类中定义了一个构造函数、一个Invoke方法、两个异步方法(BeginInvoke/EndInvoke)
2. 事件是一个特殊的委托对象,用event关键字声明,类事件成员只能在类内部调用,委托则可以在类外部调用
/// <summary> /// 事件与委托的demo /// </summary> public class EventAndDelegate { public void Run() { Teacher t = new Teacher() { Name = "mike" }; Student s = new Student(); t.Say += s.Say; t.Say2 += this.SaySomeThing; t.Say2("hello");//类成员委托可以在类外部调用 //t.Say("");//类成员事件不能在类外部调用 Teacher.Say_Static += this.SaySomeThing; Teacher.Say_Static("hello 2"); Teacher.Say_Static_Event += this.SaySomeThing; //Teacher.Say_Static_Event("");//静态事件成员也不能在类外部调用 t.Meet(); } public void SaySomeThing(string str) { Console.WriteLine(str); } } public delegate void SayHello(string str); public class Teacher { public SayHello Say2; public event SayHello Say; public static SayHello Say_Static; public static event SayHello Say_Static_Event; public string Name; public void Meet() { string str = string.Format("hello {0}", Name); if (Say != null) Say(str); if (Say2 != null) Say2(str); if (Say_Static != null) Say_Static(str); if (Say_Static_Event != null) Say_Static_Event(str); } } public class Student { public void Say(string name) { Console.WriteLine("hello " + name); } }
参考:
[C# 基础知识系列]专题二:委托的本质论
[C# 基础知识系列]专题四:事件揭秘
阅读全文
0 0
- c# 委托和委托事件
- C# 委托和事件
- c# 委托 和 事件
- c#委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- C# 委托和事件
- C#事件和委托
- C# 委托和事件
- C# 委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- c#委托和事件
- c#委托和事件
- C#委托和事件
- C# 委托和事件
- ActivityA 到 ActivityB 到 ActivityC 出现的问题
- Js中sort()方法的用法
- 返回顶部的三种方法
- 在eclipse中高亮显示其他相同的字符串
- [LeetCode] 647. Palindromic Substrings
- C#事件和委托
- react项目开发中路由的使用
- 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
- H264 sps pps 解析
- 小白成长记——Java基础之字符串类
- 软件测试中的基础小知识-后台
- 进程间通信
- DISM用于Win7部署的实验笔记
- thinkphp3.2.3图片上传类