Func delegate with no return type

前端 未结 7 1139
温柔的废话
温柔的废话 2020-12-02 03:54

All of the Func delegates return a value. What are the .NET delegates that can be used with methods that return void?

相关标签:
7条回答
  • 2020-12-02 04:25

    ... takes no arguments and has a void return type?

    I believe Action is a solution to this.

    0 讨论(0)
  • 2020-12-02 04:33

    A very easy way to invoke return and non return value subroutines. is using Func and Action respectively. (see also https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx)

    Try this this example

    using System;
    
    public class Program
    {
        private Func<string,string> FunctionPTR = null;  
        private Func<string,string, string> FunctionPTR1 = null;  
        private Action<object> ProcedurePTR = null; 
    
    
    
        private string Display(string message)  
        {  
            Console.WriteLine(message);  
            return null;  
        }  
    
        private string Display(string message1,string message2)  
        {  
            Console.WriteLine(message1);  
            Console.WriteLine(message2);  
            return null;  
        }  
    
        public void ObjectProcess(object param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("Parameter is null or missing");
            }
            else 
            {
                Console.WriteLine("Object is valid");
            }
        }
    
    
        public void Main(string[] args)  
        {  
            FunctionPTR = Display;  
            FunctionPTR1= Display;  
            ProcedurePTR = ObjectProcess;
            FunctionPTR("Welcome to function pointer sample.");  
            FunctionPTR1("Welcome","This is function pointer sample");   
            ProcedurePTR(new object());
        }  
    }
    
    0 讨论(0)
  • 2020-12-02 04:33

    Occasionally you will want to write a delegate for event handling, in which case you can take advantage of System.EvenHandler<T> which implicitly accepts an argument of type object in addition to the second parameter that should derive from EventArgs. EventHandlers will return void

    I personally found this useful during testing for creating a one-off callback in a function body.

    0 讨论(0)
  • 2020-12-02 04:33

    ... takes no arguments and has a void return type?

    If you are writing for System.Windows.Forms, You can also use:

    public delegate void MethodInvoker()
    
    0 讨论(0)
  • 2020-12-02 04:34

    All of the Func delegates take at least one parameter

    That's not true. They all take at least one type argument, but that argument determines the return type.

    So Func<T> accepts no parameters and returns a value. Use Action or Action<T> when you don't want to return a value.

    0 讨论(0)
  • 2020-12-02 04:40

    All Func delegates return something; all the Action delegates return void.

    Func<TResult> takes no arguments and returns TResult:

    public delegate TResult Func<TResult>()
    

    Action<T> takes one argument and does not return a value:

    public delegate void Action<T>(T obj)
    

    Action is the simplest, 'bare' delegate:

    public delegate void Action()
    

    There's also Func<TArg1, TResult> and Action<TArg1, TArg2> (and others up to 16 arguments). All of these (except for Action<T>) are new to .NET 3.5 (defined in System.Core).

    0 讨论(0)
提交回复
热议问题