为什么我的类尽管有定义的事件,但仍未实现接口?

Why doesn't my class implement the interface despite having a defined event?

提问人:Aleksandar 提问时间:9/4/2023 更新时间:9/4/2023 访问量:35

问:

我目前正在学习具有以下代码的事件:

public interface INotifyMessageChanged
{
    public event EventHandler MessageChanged;
}

public class Academy : Organization, INotifyMessageChanged
{
    public event EventHandler? NotifySubScriber;

    private string message = "";
    public string Message
    {
        get { return message; }
        set { message = value; MessageChanged(); }
    }
    public Academy(string name, string address) : base(name)
    {
        Address = address;
    }

    void MessageChanged()
    {
        NotifySubScriber?.Invoke(this, nul);
    }
}

该代码产生以下错误:

CS0535  'Academy' does not implement interface member 'INotifyMessageChanged.MessageChanged'

接口中的事件 MessageChanged 不应该与类中的事件相对应吗?

C# 事件 委托

评论

0赞 EyesShriveledToRaisins 9/4/2023
仅供参考:撇开“接口默认成员实现”的新功能不谈,接口是实现该接口的类型必须提供的 API/成员的约定。请注意,接口不是提供接口中指定成员的实现,而是实现接口的类必须提供实现。在 INotifyMessageChanged 中,只是一个实现 INotifyMessageChanged 接口必须实现的类的规范。你的班级学院没有,因此错误......event EventHandler MessageChangedMessageChanged
0赞 EyesShriveledToRaisins 9/4/2023
(当然,有了“接口默认成员实现”这个新功能,一个接口可以在有意义的地方和时间为其成员编写默认实现,从而将实现接口的类型从需要为这些接口成员提供实现的硬性要求中解放出来。但对于事件,只有当接口中指定的事件将代理接口或接口指定的另一个接口继承的其他事件时,这才有意义。

答:

1赞 Mad hatter 9/4/2023 #1

您的活动签名不同,其名称也不相同: 和EventHandler MessageChangedEventHandler? NotifySubscriber

public interface INotifyMessageChanged
{
    public event EventHandler? MessageChanged;
}

public class Academy : Organization, INotifyMessageChanged
{
    public event EventHandler? MessageChanged;

    private string message = "";
    public string Message
    {
        get { return message; }
        set { message = value; this.OnMessageChanged(); }
    }
    public Academy(string name, string address) : base(name)
    {
        Address = address;
    }

    void OnMessageChanged()
    {
        this.MessageChanged?.Invoke(this, null);
    }
}

评论

0赞 Aleksandar 9/4/2023
无论我是否使它们都可为空,错误仍在产生 编辑:使其与您的示例一起使用 - 谢谢!