Func delegate with no return type
C#.NetC# Problem Overview
All of the Func
C# Solutions
Solution 1 - C#
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).
Solution 2 - C#
> ... takes no arguments and has a void return type?
I believe Action
is a solution to this.
Solution 3 - C#
> 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.
Solution 4 - C#
Try System.Func<T>
and System.Action
Solution 5 - C#
A very easy way to invoke return and non return value subroutines. is using Func
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());
}
}
Solution 6 - C#
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.
Solution 7 - C#
> ... 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()