如何在C#中为事件创建包装,实现跨类接收事件数据
实现someClassA的SomeSender事件以传递ReceivedData数据
要实现需求,只需在someClassA中定义公开事件,并在收到Connector的数据时触发该事件,具体实现如下:
完整代码示例
修改后的someClassA
public class someClassA { Connector connector; // 定义公开的SomeSender事件,用于向外传递ReceivedData public event Action<ReceivedData> SomeSender; public void SubscribeToEvent(IList<string> stockNames) { connector.OnEventReceived += SomeReceiverMethod; } private void SomeReceiverMethod(ReceivedData receivedData) { // 自身的数据处理逻辑 Console.WriteLine(receivedData); // 触发事件,将数据传递给订阅者 SomeSender?.Invoke(receivedData); } }
修正后的someClassB
原代码存在语法错误,这里修正并实现事件订阅逻辑:
public class someClassB { // 通过方法参数接收someClassA实例,也可通过构造函数注入等方式获取 public void SubscribeToSomeClassA(someClassA classA) { // 订阅someClassA的SomeSender事件 classA.SomeSender += HandleReceivedData; } private void HandleReceivedData(ReceivedData receivedData) { // someClassB的数据处理逻辑 Console.WriteLine($"someClassB接收到数据: {receivedData}"); } }
关键注意点
- 事件必须声明为public,否则外部类
someClassB无法访问订阅 - 使用
Action<ReceivedData>作为事件委托,简化代码,它正好匹配接收单个ReceivedData参数且无返回值的方法签名 - 触发事件时使用
SomeSender?.Invoke(receivedData),安全处理无订阅者的场景,避免NullReferenceException someClassB需要通过合理方式获取someClassA的实例(如方法参数、构造函数注入),原代码中的var classA = someClassA;是语法错误,需修正
内容的提问来源于stack exchange,提问作者JGeorgeJ
相关产品推荐
相关产品推荐

