在接口中实现委托

4

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

我想要实现这个:

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

请帮我完成这个任务 :)


也许有一些诀窍?我只想从使用接口创建的对象中获取回调。 - Vadim Vdovenko
如果我能够使用接口中声明的某些方法来分配委托,那就太好了。 - Vadim Vdovenko
你能否给这个问题打上标签,包括编程语言。这可能会帮助你获得更多的浏览量... - Rick Smith
在这个例子中,“s” 可以是几个不同的类,它们以不同的方式执行相同的操作。例如,它可以是 AndroidConnectionService 或 IOSConnectionService,两者都实现了 IConnectionService 接口。我需要从这些对象中获取回调,而不需要“询问”它们的类。 - Vadim Vdovenko
我无法正确实现这个接口成员 - 它一直报错 :( - Vadim Vdovenko
显示剩余6条评论
1个回答

5
如果您想在不将回调强制转换为具体类型的情况下使用回调,则需要将回调移到接口中。请注意,您当前的实现将callback作为一个字段。要在接口中声明它,您必须将它变为一个属性

因为属性实际上是方法,所以您必须在具体类中实现该属性。在此处使用自动属性对实现没有问题。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接