13.07.2015 Views

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 14 Expressionsint[,] = new int[100, 5];creates only a single object, a two-dimensional array, and accomplishes the allocation in a single statement.14.5.10.3 Delegate creation expressionsA delegate-creation-expression is used to create a new instance of a delegate-type.delegate-creation-expression:new delegate-type ( expression )The argument of a delegate creation expression must be a method group (§14.1) or a value of a delegatetype.If the argument is a method group, it identifies the method and, for an instance method, the object forwhich to create a delegate. If the argument is a value of a delegate-type, it identifies a delegate instance ofwhich to create a copy.The compile-time processing of a delegate-creation-expression of the form new D(E), where D is adelegate-type and E is an expression, consists of the following steps:• If E is a method group:The set of methods identified by E must include exactly one method that is compatible (§22.1) with D, andthis method becomes the one to which the newly created delegate refers. If no matching method exists, or ifmore than one matching method exists, a compile-time error occurs. If the selected method is an instancemethod, the instance expression associated with E determines the target object of the delegate.As in a method invocation, the selected method must be compatible with the context of the method group: Ifthe method is a static method, the method group must have resulted from a simple-name or a member-accessthrough a type. If the method is an instance method, the method group must have resulted from a simplenameor a member-access through a variable or value. If the selected method does not match the context ofthe method group, a compile-time error occurs.The result is a value of type D, namely a newly created delegate that refers to the selected method and targetobject.• Otherwise, if E is a value of a delegate-type:D and E must be compatible (§22.1); otherwise, a compile-time error occurs.The result is a value of type D, namely a newly created delegate that refers to the same invocation list as E.• Otherwise, the delegate creation expression is invalid, and a compile-time error occurs.The run-time processing of a delegate-creation-expression of the form new D(E), where D is a delegate-typeand E is an expression, consists of the following steps:• If E is a method group:If the method selected at compile-time is a static method, the target object of the delegate is null.Otherwise, the selected method is an instance method, and the target object of the delegate is determinedfrom the instance expression associated with E:• The instance expression is evaluated. If this evaluation causes an exception, no further steps areexecuted.• If the instance expression is of a reference-type, the value computed by the instance expressionbecomes the target object. If the target object is null, a System.NullReferenceExceptionis thrown and no further steps are executed.• If the instance expression is of a value-type, a boxing operation (§11.3.1) is performed toconvert the value to an object, and this object becomes the target object.A new instance of the delegate type D is allocated. If there is not enough memory available to allocate thenew instance, a System.OutOfMemoryException is thrown and no further steps are executed.149

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!