I have...
Func<string> del2 = new Func<string>(MyMethod);
and I really want to do..
Func<> del2 = new Func<>(MyMethod);
so the return type of the callback method is void. Is this possible using the generic type func?
Delegates defined within a generic class can use the generic class type parameters in the same way that class methods do. Generic delegates are especially useful in defining events based on the typical design pattern because the sender argument can be strongly typed and no longer has to be cast to and from Object.
You can pass methods as parameters to a delegate to allow the delegate to point to the method. Delegates are used to define callback methods and implement event handling, and they are declared using the “delegate” keyword. You can declare a delegate that can appear on its own or even nested inside a class.
Func, Action and Predicate are generic inbuilt delegates present in System namespace. All three can be used with method, anonymous method and lambda expression.
The Func
family of delegates is for methods that take zero or more parameters and return a value. For methods that take zero or more parameters an don't return a value use one of the Action
delegates. If the method has no parameters, use the non-generic version of Action
:
Action del = MyMethod;
Yes a function returning void (no value) is a Action
public Test()
{
// first approach
Action firstApproach = delegate
{
// do your stuff
};
firstApproach();
//second approach
Action secondApproach = MyMethod;
secondApproach();
}
void MyMethod()
{
// do your stuff
}
hope this helps
Use Action delegate type.
In cases where you're 'forced' to use Func<T>
, e.g. in an internal generic API which you want to reuse, you can just define it as new Func<object>(() => { SomeStuff(); return null; });
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With