C#学习系列之事件

C#学习系列之事件


前言

基础学习。

事件

发布者和订阅者

发布者:通知某件事情发生的。

订阅者:对某件事情关注的。

事件触发和注册

触发:事件发生就通知所有关注该事件的订阅者。

注册:想要得到通知,必须注册并关注。

事件发生时,通知订阅者,调用订阅者的注册函数。

事件声明

csharp 复制代码
delegate void Handler();
public event Handler NewDog;//NewDog是一个成员,会被隐式自动初始化为null
//这里的Handler为委托类型,NewDog为事件名
//这里常会出现问题,应该注意!!!

事件订阅

csharp 复制代码
NewDog+=方法
NewDog-=方法
//方法可以是实例方法、静态方法、匿名方法、lambda表达式

事件触发

封装的受限制的委托。

csharp 复制代码
if(NewDog!=null)
{
	NewDog();
	}

使用

csharp 复制代码
public class Dog:Pet
{
	static int Num;
	public delegate void Handler();
	public static event Handler NewDog;
	static Dog()
	{
		Num=0;
		}
	public Dog(string name):base(name)
	{
		++Num;
		if(NewDog!=null)
		{
			NewDog();
		}
	}
}
class Client
{
	public void WantADog()
	{
		Console.WriteLine("xx");
	}
}

Client c1=new Client();
Client c2=new Client();
Dog.NewDog+=c1.WantADog;//相当于把Client的方法赋给事件了
Dog.NewDog+=c2.WantADog;
Dog dog=new Dog("Q");

//最后事件打印出来会显示xx

总结

学习记录。

https://www.imooc.com/video/14246/0

相关推荐
悠哉悠哉愿意8 分钟前
【ROS2学习笔记】rqt 模块化可视化工具
笔记·学习·机器人·ros2
ss27319 分钟前
手写MyBatis第92弹:SqlSource体系、SqlNode树与Trim标签实现原理全揭秘
java·开发语言
2501_9159090626 分钟前
iOS 抓包工具有哪些?实战对比、场景分工与开发者排查流程
android·开发语言·ios·小程序·uni-app·php·iphone
charlie1145141911 小时前
精读C++设计模式20 —— 结构型设计模式:桥接模式
开发语言·c++·学习·设计模式·桥接模式·c++23·概论
heyCHEEMS1 小时前
最长连续序列 Java
java·开发语言·算法
waves浪游2 小时前
C++多态
开发语言·c++
A9better3 小时前
嵌入式开发学习日志32——stm32之PWM
stm32·单片机·嵌入式硬件·学习
一只乔哇噻3 小时前
java后端工程师进修ing(研一版‖day50)
java·开发语言
快码加编~3 小时前
无法解析插件 org.apache.maven.plugins:maven-site-plugin:3.12.1
java·学习·maven·intellij-idea
aramae3 小时前
快速排序的深入优化探讨
c语言·开发语言·c++·算法·排序算法