我有一个我想要触发事件的日志类。该事件位于我的基类上。只要我在基类中进行调用,它就可以正常工作。我的问题是"外部"调用:
我的基类:
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 -=
我的目标是每当我创建日志条目时在OnLogMessage
中触发Foo
,无论我是从类本身的内部还是外部登录。我之所以将其作为参数,是因为我还有其他一些事件。
答案 0 :(得分:1)
事件只能由他们自己的类型引发,所以你的接口和实现应该发布一个方法,然后在调用时引发事件。
你应该考虑你班级的问题。 OnLogMessage事件应由关注处理日志消息的类引发。如果你遵守这条规则,你就不应该再遇到这种情况了。
特别是在代码示例中,请为您的类型和成员命名有意义的内容。我发现很难理解示例代码(Foo)背后的动机和责任。