从外部类触发事件

时间:2015-12-23 10:30:45

标签: c# winforms

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

我的基类:

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,无论我是从类本身的内部还是外部登录。我之所以将其作为参数,是因为我还有其他一些事件。

1 个答案:

答案 0 :(得分:1)

事件只能由他们自己的类型引发,所以你的接口和实现应该发布一个方法,然后在调用时引发事件。

你应该考虑你班级的问题。 OnLogMessage事件应由关注处理日志消息的类引发。如果你遵守这条规则,你就不应该再遇到这种情况了。

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