将callback函数传递给另一个类
我基本上是试图传递一个方法到另一个类,稍后调用,但不能完全弄清楚在C#中(我仍然习惯于Objective-C)。
public class Class1{ private void btn_click(object sender, EventArgs e) { ServerRequest sr = new ServerRequest(); sr.DoRequest("myrequest", myCallback); } public void myCallback(string str) { } }
然后,我想我的ServerRequest类基本上触发callback函数,这是不可能的? (我基本上打电话回家的服务器login回应我的软件)
我一直没有find办法与代表这样做,不断地得到错误。 这是另一个class级:
public class ServerRequest { public void DoRequest(string request, Delegate callback) { // do stuff.... callback("asdf"); } }
这可能在#中吗? 在Objective-C中,这将是简单的,我会做一些像
[myObject performSelector(@selector(MyFunctionName)) withObjects:nil];
你可以将它作为Action<string>
传递 – 这意味着它是一个带有单个string
参数的方法,它不返回任何东西(void):
public void DoRequest(string request, Action<string> callback) { // do stuff.... callback("asdf"); }
public class Class1 { private void btn_click(object sender, EventArgs e) { ServerRequest sr = new ServerRequest(); sr.Callback += new ServerRequest.CallbackEventHandler(sr_Callback); sr.DoRequest("myrequest"); } void sr_Callback(string something) { } } public class ServerRequest { public delegate void CallbackEventHandler(string something); public event CallbackEventHandler Callback; public void DoRequest(string request) { // do stuff.... if (Callback != null) Callback("bla"); } }
你必须首先声明委托的types,因为委托是强types的:
public void MyCallbackDelegate( string str ); public void DoRequest(string request, MyCallbackDelegate callback) { // do stuff.... callback("asdf"); }
Delegate
只是基类,所以你不能像这样使用它。 你可以做这样的事情:
public void DoRequest(string request, Action<string> callback) { // do stuff.... callback("asdf"); }
你可以用这种方式来改变你的代码:
public delegate void CallbackHandler(string str); public class ServerRequest { public void DoRequest(string request, CallbackHandler callback) { // do stuff.... callback("asdf"); } }
你需要的是一个委托和一个callback。 这里是一个很好的MSDN文章,将告诉你如何在C#中使用这种技术。