Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoke c# event inside interface

I am trying to invoke an event in the interface in which it is defined (see code below). However, I get the following error: Program.cs(7,3): error CS0079: The event 'IMyInterface.MyEvent' can only appear on the left hand side of += or -=.
I suspect it might have something to do with all events declared in interfaces are always properties. Is this a bug, a feature, and are there any workarounds?

Thanks.

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();
    }
}
like image 736
Edmond_ _Dantes Avatar asked Sep 01 '26 08:09

Edmond_ _Dantes


1 Answers

I think it's because event EventHandler? MyEvent not implemented inside your interface, it will be implemented inside your class and after it, you can Invoke it:

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

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

After C# 8 you actualy can do default implementation of methods inside interface, but only methods, not events.

If you want predefined method, that will call event, you can make abstract class instead of interface.

like image 99
Karoshee Avatar answered Sep 03 '26 21:09

Karoshee