C#中的委托和事件
来源:互联网 发布:通联数据股份有限公司 编辑:程序博客网 时间:2024/04/30 06:46
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If‐Else(Switch)语句,同时使得程序具有更好的可扩展性。
委托具有以下特点:
1、委托类似于C/C++函数指针,但它是类型安全的。
2、委托允许将方法作为参数进行传递。
3、委托可用于定义回调方法。
4、委托可以将多个方法关联在一起。例如,可以对一个事件调用多个方法。
5、委托所指向的方法不需要与委托签名精确匹配。
定义和使用委托:
1、声明委托类型
2、实例化委托对象
3、调用委托方法
事件是类在发生其关注的事情时用来提供通知的一种方式。当发生与某个对象相关的事件时,该类会使用事件将这一对象通知给用户。这种通知即为引发事件,引发事件的对象称为事件源或者发行者。
接收时间的对象称为订阅者,订阅者之所以会接到通知,是因为订阅者订阅了事件源的该事件
事件的创建与使用
1、在事件源类的声明中为事件创建一个委托类型和声明事件
2、在订阅者类中创建时间处理方法
3、订阅事件
4、创建引发事件的方法
例子:事件
委托具有以下特点:
1、委托类似于C/C++函数指针,但它是类型安全的。
2、委托允许将方法作为参数进行传递。
3、委托可用于定义回调方法。
4、委托可以将多个方法关联在一起。例如,可以对一个事件调用多个方法。
5、委托所指向的方法不需要与委托签名精确匹配。
定义和使用委托:
1、声明委托类型
2、实例化委托对象
3、调用委托方法
事件是类在发生其关注的事情时用来提供通知的一种方式。当发生与某个对象相关的事件时,该类会使用事件将这一对象通知给用户。这种通知即为引发事件,引发事件的对象称为事件源或者发行者。
接收时间的对象称为订阅者,订阅者之所以会接到通知,是因为订阅者订阅了事件源的该事件
事件的创建与使用
1、在事件源类的声明中为事件创建一个委托类型和声明事件
2、在订阅者类中创建时间处理方法
3、订阅事件
4、创建引发事件的方法
5、引发事件
例子:委托
namespace @delegate{ delegate double mydelegate(double x, double y); //声明委托类型 class MyDeClass //声明含有方法的类 { public double add(double x,double y) { return x + y; } public double sub(double x,double y) { return x + y; } } class Program { static void Main(string[] args) { MyDeClass myDeClass = new MyDeClass(); mydelegate p = new mydelegate(myDeClass.add);//mydelegate p=myDeClass.add 委托对象关联方法 Console.WriteLine("1+1={0}", p(1, 1));//调用委托对象 p = myDeClass.sub; Console.WriteLine("2-1={0}", p(2, 1)); } }}
例子:事件
namespace @event{ public class Teacher { private string name; public delegate void delegateType();//声明事件委托类型 public event delegateType ClassEvent;//声明一个上课事件 public Teacher(string name) { this.name = name; } public void Start()//引发事件的方法 { Console.WriteLine(name + "教师宣布开始上课"); if (ClassEvent != null) ClassEvent();//引发事件的语句 } public class Student { private string sname; public Student (string name) { this.sname = name; } public void Listener() { Console.WriteLine("学生" + sname + "正在认真听课"); } public void Record() { Console.WriteLine("学生" + sname + "正在做笔记"); } } class Program { static void main(string[] args) { Teacher t = new Teacher("李明"); Student s1 = new Student("小明"); Student s2 = new Student("大明"); t.ClassEvent += new Teacher.delegateType(s1.Listener); t.ClassEvent += new Teacher.delegateType(s2.Record); t.Start();//引发事件 } } }}
0 0
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- c#中的委托和事件
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- 腾讯后台研发实习岗二面
- Android studio 使用记录(持续更新)
- 自定义searchBar使其placeholder左对齐
- LeetCode 238 Product of Array Except Self
- C#中的委托和事件
- C++ primer 第四章--数组和指针
- Js Map 和 List的简单实现
- 微信自定义分享的签名版实现
- mysql、sql server、oracle的连接信息
- ARC和非ARC下使用Block属性的问题
- Objective-C学习笔记1
- PYTHON 併行
- 我应该有的习惯