在接口中实现委托

本文关键字:实现 接口 | 更新日期: 2023-09-27 18:35:26

我找不到在接口中实现委托的方法

我想得到这个:

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

但是如果我使用接口创建类"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();
    }
}

请帮我:)

在接口中实现委托

如果要

使用回调而不使用具体类型的大小写,则需要将回调移动到接口。请注意,当前实现已callback字段。若要在接口中声明它,必须使其成为属性

由于属性实际上是方法,因此必须在具体类中实现该属性。 使用 auto 属性对于此处的实现很好。

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

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