A delegate creation expression is used to create a new instance of a delegate type. The argument of a delegate creation expression must be an invocation target. If the argument is a method or a set of overloaded methods, it identifies the method and, for an instance method, the object for which to create a delegate. If the argument is a value of a delegate type, it identifies a delegate instance of which to create a copy.
If the invocation target is a method or set of overloaded methods, one of the method's signature must exactly match the signature of the delegate. If the invocation target is a delegate expression, the signature of the type of the delegate expression must exactly match the signature of the delegate. Otherwise, an error occurs. Note that if the invocation target is a shared method, any expression on the left hand side of a period will not be evaluated (because it is unnecessary). Also note that if the expression on the left hand side of a period results in a value type, the value type will be boxed at runtime when the delegate is created.
The method and object to which a delegate refers are determined when the delegate is instantiated and then remain constant for the entire lifetime of the delegate. In other words, it is not possible to change the target or object of a delegate once it has been created. It is not possible to create a delegate that refers to a constructor or property. If a conditional attribute is set on the invocation target of a delegate creation expression, it is ignored.
New
DelegateTypeName (
InvocationTargetExpression )