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 Expressions14. ExpressionsAn expression is a sequence of operators and operands. This chapter defines the syntax, order of evaluationof operands and operators, and meaning of expressions.14.1 Expression classificationsAn expression is classified as one of the following:• A value. Every value has an associated type.• A variable. Every variable has an associated type, namely the declared type of the variable.• A namespace. An expression with this classification can only appear as the left-hand side of a memberaccess(§14.5.4). In any other context, an expression classified as a namespace causes a compile-timeerror.• A type. An expression with this classification can only appear as the left-hand side of a member-access(§14.5.4), or as an operand for the as operator (§14.9.10), the is operator (§14.9.9), or the typeofoperator (§14.5.11). In any other context, an expression classified as a type causes a compile-time error.• A method group, which is a set of overloaded methods resulting from a member lookup (§14.3). Amethod group may have an associated instance expression. When an instance method is invoked, theresult of evaluating the instance expression becomes the instance represented by this (§14.5.7). Amethod group is only permitted in an invocation-expression (§14.5.5) or a delegate-creation-expression(§14.5.10.3). In any other context, an expression classified as a method group causes a compile-timeerror.• A property access. Every property access has an associated type, namely the type of the property.Furthermore, a property access may have an associated instance expression. When an accessor (the getor set block) of an instance property access is invoked, the result of evaluating the instance expressionbecomes the instance represented by this (§14.5.7).• An event access. Every event access has an associated type, namely the type of the event. Furthermore,an event access may have an associated instance expression. An event access may appear as the lefthandoperand of the += and -= operators (§14.13.3). In any other context, an expression classified as anevent access causes a compile-time error.• An indexer access. Every indexer access has an associated type, namely the element type of theindexer. Furthermore, an indexer access has an associated instance expression and an associatedargument list. When an accessor (the get or set block) of an indexer access is invoked, the result ofevaluating the instance expression becomes the instance represented by this (§14.5.7), and the result ofevaluating the argument list becomes the parameter list of the invocation.• Nothing. This occurs when the expression is an invocation of a method with a return type of void. Anexpression classified as nothing is only valid in the context of a statement-expression (§15.6).The final result of an expression is never a namespace, type, method group, or event access. Rather, as notedabove, these categories of expressions are intermediate constructs that are only permitted in certain contexts.A property access or indexer access is always reclassified as a value by performing an invocation of the getaccessoror the set-accessor. The particular accessor is determined by the context of the property or indexeraccess: If the access is the target of an assignment, the set-accessor is invoked to assign a new value(§14.13.1). Otherwise, the get-accessor is invoked to obtain the current value (§14.1.1).123

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

Saved successfully!

Ooh no, something went wrong!