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)
请帮我解决一下:)
如果您想使用回调而不将其封装为具体类型,则需要将回调移至接口。请注意,您当前的实现有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)