将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#中使用这种技术。