在接口中实现委托

时间:2016-02-18 19:57:33

标签: c# events interface callback delegates

我无法找到在接口

中实现委托的方法

我想得到这个:

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

请帮助我:)

1 个答案:

答案 0 :(得分:0)

如果要在没有外壳的情况下使用回调,则需要将回调移动到接口。请注意,您当前的实现具有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();
    }
}