定义事件
定义简单事件
定义事件前必须先定义用于该事件的委托类型
public delegate void simDelegate(string Name);
定义了委托后,就可以把事件本身定义为一个类成员
public class SimpleEve { public event simDelegate simEve;
订阅方法,前提是方法的参数必须与事件的委托类型的参数相一致
simEve += simpleTest.Texts;
simEve += simpleTest.Text2;
引发事件,必须在该类中引发,在外部只能订阅,引发时要注意是否有参数
simEve(name);
整体代码:
public delegate void simDelegate(string Name); public class SimpleEve { public event simDelegate simEve; private string name; public SimpleEve(string newName) => this.name = newName; public void Start()=> simEve(name);//引发事件 } public class SimpleTest { public void Texts(string name) => Console.WriteLine($"6666{name}"); public void Text2(string name) => Console.WriteLine($"{name}6666"); }
static void Main(string[] args) { SimpleEve simpleEve = new SimpleEve("TT"); SimpleTest simpleTest = new SimpleTest(); simpleEve.simEve += simpleTest.Texts; simpleEve.simEve += simpleTest.Text2; simpleEve.Start(); Console.ReadKey(); }
多用途事件
class DelegateTest { public event EventHandler eventTest; //创建多用途事件 private EventArgsTest eventArgsTest; public DelegateTest() { eventArgsTest = new EventArgsTest("TT"); eventTest += new EventHandler(StrTest.Run); } public void Start() => eventTest(this, eventArgsTest); //引发事件 } class StrTest {public static void Run(object source, EventArgs e) //委托参数 { string test = $"asfsfagsg sa {((EventArgsTest)e).Message} sad "; //多态性 Console.Write(test); } }
class EventArgsTest:EventArgs { private string message; public string Message { get => message; } public EventArgsTest() => message = "no message"; public EventArgsTest(string newMessage) => message = newMessage; }
DelegateTest delegateTest = new DelegateTest(); delegateTest.Start();
多用途事件有两个参数:
object source ------ 引发事件的对象的引用
ElapsedEventArgs e ------- 由事件传送的参数
source是指定生成事件的对象
EventArgs为参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器