Passing a callback function to another class

前端 未结 7 1379
小鲜肉
小鲜肉 2021-01-30 00:39

I\'m basically trying to pass a method to another class to be called later, but can\'t quite figure this out in C# (I\'m still too used to Objective-C).

public c         


        
相关标签:
7条回答
  • 2021-01-30 01:04

    You can pass it as Action<string> - which means it is a method with a single parameter of type string that doesn't return anything (void) :

    public void DoRequest(string request, Action<string> callback)
    {
        // do stuff....
        callback("asdf");
    }
    
    0 讨论(0)
  • 2021-01-30 01:10

    You could use only delegate which is best for callback functions:

    public class ServerRequest
    {
        public delegate void CallBackFunction(string input);
    
        public void DoRequest(string request, CallBackFunction callback)
        {
            // do stuff....
            callback(request);
        }
    }
    

    and consume this like below:

    public class Class1
        {
            private void btn_click(object sender, EventArgs e)
            {
                ServerRequest sr = new ServerRequest();
                var callback = new ServerRequest.CallBackFunction(CallbackFunc);
                sr.DoRequest("myrequest",callback);
            }
    
            void CallbackFunc(string something)
            {
    
            }
    
    
        }
    
    0 讨论(0)
  • 2021-01-30 01:16

    You could change your code in this way:

    public delegate void CallbackHandler(string str);
    
    public class ServerRequest
    {
        public void DoRequest(string request, CallbackHandler callback)
        {
            // do stuff....
            callback("asdf");
        }
    }
    
    0 讨论(0)
  • 2021-01-30 01:16

    What you need is a delegate and a callback. Here is a nice MSDN article that will show you how to use this technique in C#.

    0 讨论(0)
  • 2021-01-30 01:18

    You have to first declare delegate's type because delegates are strongly typed:

    public void MyCallbackDelegate( string str );
    
    public void DoRequest(string request, MyCallbackDelegate callback)
    {
         // do stuff....
         callback("asdf");
    }
    
    0 讨论(0)
  • 2021-01-30 01:23
    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");
            }
        }
    
    0 讨论(0)
提交回复
热议问题