在接口中实现委托
本文关键字:实现 接口 | 更新日期: 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();
}
}