在接口中实现委托

Vad*_*nko 4 c# events delegates interface callback

我找不到在界面中实现委托的方法

我想得到这个:

public class SomeClass : ISomeInterface
{
    public delegate void SomeCallback();
    public SomeCallback callback;

    public void SomeMethod()
    {
         callback.invoke();
    }
}

public class MainClass
{
    void Callback() { Console.WriteLine("Callback"); }

    public void Start()
    {
         SomeClass s = new SomeClass();
         s.callback = Callback;
         s.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我使用接口创建“SomeClass”类的实例:

public class MainClass
{

    void Callback() { Console.WriteLine("Callback"); }

    public void Start()
    {
         ISomeInterface s = new SomeClass();   // <<<----
         s.callback = Callback;                // here will be an error :(
         s.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮我解决一下:)

Glo*_*oot 5

如果您想使用回调而不将其封装为具体类型,则需要将回调移至接口。请注意,您当前的实现有callback一个field。要在接口中声明它,您必须将其设为属性

因为属性实际上是方法,所以您必须在具体类中实现属性。使用自动属性对于这里的实现来说是很好的。

完成这些更改后,您可以仅使用接口设置和调用回调。

public delegate void SomeCallback();

public interface ISomeInterface {
    SomeCallback callback { get; set; }
    void SomeMethod();
}

public class SomeClass : ISomeInterface
{
    public SomeCallback callback { get; set; }

    public void SomeMethod()
    {
        callback.Invoke();
    }
}

public class MainClass
{
    void Callback() { Console.WriteLine("Callback"); }

    public void Start()
    {
        ISomeInterface s = new SomeClass();
        s.callback = Callback;
        s.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)