System.Core 3.5.0.0 System.Delegate TResult To be added. To be added.

You can use this delegate to represent a method that can be passed as a parameter without explicitly declaring a custom delegate. The encapsulated method must correspond to the method signature that is defined by this delegate. This means that the encapsulated method must have no parameters and must return a value.

To reference a method that has no parameters and returns void (or in Visual Basic, that is declared as a Sub rather than as a Function), use the delegate instead.

When you use the delegate, you do not have to explicitly define a delegate that encapsulates a parameterless method. For example, the following code explicitly declares a delegate named WriteMethod and assigns a reference to the OutputTarget.SendToFile instance method to its delegate instance.

code reference: System.Func~1#1

The following example simplifies this code by instantiating the delegate instead of explicitly defining a new delegate and assigning a named method to it.

code reference: System.Func~1#2

You can use the delegate with anonymous methods in C#, as the following example illustrates. (For an introduction to anonymous methods, see Anonymous Methods (C# Programming Guide).)

code reference: System.Func~1#3

You can also assign a lambda expression to a delegate, as the following example illustrates. (For an introduction to lambda expressions, see Lambda Expressions and Lambda Expressions (C# Programming Guide).)

code reference: System.Func~1#4

The underlying type of a lambda expression is one of the generic Func delegates. This makes it possible to pass a lambda expression as a parameter without explicitly assigning it to a delegate. In particular, because many methods of types in the namespace have Func parameters, you can pass these methods a lambda expression without explicitly instantiating a Func delegate.

If you have an expensive computation that you want to execute only if the result is actually needed, you can assign the expensive function to a delegate. The execution of the function can then be delayed until a property that accesses the value is used in an expression. The example in the next section demonstrates how to do this.

Encapsulates a method that has no parameters and returns a value of the type specified by the parameter.