提问者:小点点

在接口内部调用c#事件


我试图在定义它的接口中调用一个事件(请参见下面的代码)。但是,我得到了以下错误:程序。cs(7,3):错误CS0079:事件“IMyInterface”。MyEvent'只能出现在=或-=的左侧
我怀疑这可能与接口中声明的所有事件都始终是属性有关。这是一个bug、一个特性吗?有什么解决方法吗?

谢谢。

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();
    }
}

共1个答案

匿名用户

我想是因为事件EventHandler?我的事件不是在你的接口中实现的,它将在你的类中实现,之后,你可以调用它:

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

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

在C#8之后,您实际上可以在接口中执行方法的默认实现,但只能执行方法,不能执行事件或字段。

如果需要调用事件的预定义方法,可以使用抽象类而不是接口