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

相关推荐
tju新生代魔迷16 分钟前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
-今昭-25 分钟前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设2 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
我爱cope3 小时前
【计算机网络 | 网络层11:ICMP 协议:Ping 和 Traceroute 的底层原理】
网络·学习·计算机网络
_Twink1e3 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
公子小六3 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
问天_观心3 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长3 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
苏生Susheng4 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
曹牧4 小时前
C#:文本文件读取
服务器·前端·c#