using System;
namespace 带参数的委托
{
//1、定义带参数的委托EventArgs
public class MyEventArgs : EventArgs
{
public string mymessage;
public MyEventArgs(string mm)
{
mymessage = mm;
}
}
//定义订阅者(包含事件)
public class MyPublisher
{
public int money;
public string name;
//2、通过EventHandler定义事件
public EventHandler<MyEventArgs> Myevent;
//3、可能触发事件的函数
public void ConsumeMoney()
{
money--;
if (money < 0)
Myevent(this, new MyEventArgs(money.ToString()));
}
}
public class MySubscriber
{
//4、回调函数
public void MyDispl(object sender,MyEventArgs e)
{
Console.WriteLine("来自订阅者:{0}",((MyPublisher)sender).name);
Console.WriteLine("金额小于0了,为:{0}元",e.mymessage);
}
}
public class Program
{
public static void Main(string[] args)
{
//5、注册回调函数
MySubscriber ms = new MySubscriber();
MyPublisher mp1 = new MyPublisher();
mp1.name = "王凯康";
mp1.money = 5;
mp1.Myevent += ms.MyDispl;
MyPublisher mp2 = new MyPublisher();
mp2.name = "姚家轩";
mp2.money = 10;
mp2.Myevent += ms.MyDispl;
MyPublisher mp3 = new MyPublisher();
mp3.name = "张浩然";
mp3.money = 7;
mp3.Myevent += ms.MyDispl;
//6、调用可能触发事件的函数,达到条件时,触发事件,引起回调函数相应
for(int i=0;i<11;i++)
{
mp1.ConsumeMoney();
mp2.ConsumeMoney();
mp3.ConsumeMoney();
}
}
}
}
``
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd8707e382fc43ae9d8081cde323cd9a.jpeg#pic_center)
C# 使用带参数的委托
于 2022-06-07 15:59:36 首次发布