正在从外部类触发事件

本文关键字:事件 从外部 | 更新日期: 2023-09-27 18:27:47

我有一个日志类,我想从中触发事件。该活动位于我的基类上。只要我从基类内部进行调用,它就可以正常工作。我的问题是"外部"呼叫:

我的基类:

public delegate void StatusUpdateHandler(object sender, object arg);
public interface IFoo
{
    event StatusUpdateHandler OnStatusChanged;
}
public class Foo : IFoo
{
    public event StatusUpdateHandler OnStatusChanged;
}

我的日志类方法(在另一个类中):

public void Log(string logMessage, StatusUpdateHandler updateHandler)
{
    logEntries.Add(logMessage);
    if (updateHandler == null)
        return;
    updateHandler(this, logMessage);
}

Foo中调用方法效果良好:

loggerInstance.Log("test", OnLogMessage);

但是当我从类外进行调用时,我会得到以下编译错误:

void OutsideFooLog(IFoo foo)
{
    loggerInstance.Log("test", foo.OnLogMessage)
}
// The event 'OnLogMessage' can only appear on the left hand side of += or -=

我在这里的目标是,无论我是从类内部还是从类外部进行日志记录,都要在Foo中触发OnLogMessage。我之所以希望它作为一个参数,是因为我还有其他几个事件。

正在从外部类触发事件

事件只能由其所属类型引发,因此接口和实现应该发布一个方法,该方法将在调用时引发事件。

你应该考虑一下你班上关心的问题。OnLogMessage事件应由其关注点是处理日志消息的类引发。如果你遵循这条规则,你就不应该再陷入那种境地。

此外,特别是在代码示例中,请为您的类型和成员命名一些有意义的名称。我发现很难理解示例代码(Foo)背后的动机和责任。