3

我试图在定义它的接口中调用一个事件(参见下面的代码)。但是,我收到以下错误: Program.cs(7,3): error CS0079: The event 'IMyInterface.MyEvent' can only appear on the left hand side of += or -=.
我怀疑它可能与接口中声明的所有事件始终是属性有关。这是一个错误,一个功能,是否有任何解决方法?

谢谢。

using System;
public interface IMyInterface
{
    event EventHandler? MyEvent;
    void CallMyEvent()
    {
        MyEvent?.Invoke(this, EventArgs.Empty);
    }
}

public class MyClass : IMyInterface
{
    public event EventHandler? MyEvent;
}
static class Program
{
    static void Main()
    {
        var obj = new MyClass();
        obj.CallMyEvent();
    }
}
4

2 回答 2

2

我认为这是因为event EventHandler? MyEvent没有在您的界面中实现,它将在您的类中实现,在它之后,您可以Invoke

public class MyClass : IMyInterface
{
    public event EventHandler? MyEvent;

    public void CallMyEvent()
    {
        MyEvent?.Invoke(this, EventArgs.Empty);
    }
}

在 C# 8 之后,您实际上可以在内部执行方法的默认实现interface,但只能执行方法,不能执行事件。

如果您想要预定义的方法,它将调用事件,您可以使用 makeabstract class而不是interface.

于 2021-12-09T14:44:11.067 回答
0

似乎解决此问题的唯一方法是在接口外调用事件。要么使用我试图避免的抽象类,要么使用常规接口方法并放弃 DRY 代码。

于 2021-12-11T12:21:29.520 回答