正在从外部类触发事件
本文关键字:事件 从外部 | 更新日期: 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)背后的动机和责任。