You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:05:57