C# 核心--事件型接口
在 C# 中,事件(Event) 是一种特殊的成员,它基于 委托(Delegate) 提供了一种 安全的发布-订阅(Publisher-Subscriber)机制,常用于对象间通信,尤其是在 GUI(如 WPF / WinForms)、异步编程和事件驱动设计中。
当事件与 接口(Interface) 结合使用时,我们称之为 “事件接口” 或 “在接口中定义事件”,它表示:某个接口要求实现类必须提供特定的事件成员。
一、🔷 什么是“C# 事件接口的实现语法”?
-
定义一个接口,其中包含一个或多个事件成员(语法)
-
实现该接口的类中,如何正确地提供(实现)这些事件(语法)
二、🔷 1. 在接口中定义事件(语法)
✅ 语法格式:
public interface IMyInterface
{event EventHandler MyEvent; // 定义一个事件成员
}
-
event
是关键字,表示该成员是一个事件; -
EventHandler
是 .NET 提供的标准委托类型,表示事件处理方法的签名是:void Handler(object sender, EventArgs e)
-
你也可以定义 自定义委托类型的事件,或使用 泛型
EventHandler<TEventArgs>
✅ 示例:定义一个带事件的接口
using System;// 定义一个接口,其中包含一个事件
public interface INotifyStatusChanged
{event EventHandler StatusChanged; //事件:状态改变时触发,接口的成员隐式Public,不能有任何修饰符
}
这个接口的意思是:任何实现了 INotifyStatusChanged
的类,都必须提供一个名为 StatusChanged
的事件,类型为 EventHandler
。
三、🔷 2. 实现接口中的事件(语法)
当一个类 实现了包含事件的接口 时,它 必须为该接口中的每个事件成员提供具体的实现,否则会引发 编译错误。
✅ 示例:实现上述接口
public class MyService : INotifyStatusChanged
{// ✅ 必须实现接口中的事件public event EventHandler StatusChanged; //这里是接口事件实现public void DoSomething(){Console.WriteLine("执行某些操作...");// 触发事件StatusChanged?.Invoke(this, EventArgs.Empty);}
}
✅ 使用示例:
var service = new MyService();// 订阅事件
service.StatusChanged += (sender, e) =>
{Console.WriteLine("状态改变了!我收到了通知。");
};// 调用方法,触发事件
service.DoSomething();
四、🔷 3. 事件在接口中的实现要点总结
项目 | 说明 |
---|---|
事件定义在接口中 | 使用 |
实现类必须实现接口事件 | 类中必须提供 |
事件触发 | 在类的方法中,通过 |
事件订阅 | 外部代码通过 |
推荐使用泛型事件 | 使用 |
接口只定义契约 | 接口不提供事件的具体逻辑,只要求实现类必须提供该事件成员 |