Table of Contents 2 страница
6.3.2 Standard explicit conversions...................................................................................................... 119 6.4 User-defined conversions................................................................................................................. 119 6.4.1 Permitted user-defined conversions............................................................................................. 119 6.4.2 Lifted conversion operators........................................................................................................ 120 6.4.3 Evaluation of user-defined conversions........................................................................................ 120 6.4.4 User-defined implicit conversions................................................................................................ 121 6.4.5 User-defined explicit conversions................................................................................................ 122 6.5 Anonymous function conversions...................................................................................................... 123 6.5.1 Evaluation of anonymous function conversions to delegate types................................................... 124 6.5.2 Evaluation of anonymous function conversions to expression tree types......................................... 124 6.5.3 Implementation example............................................................................................................. 124 6.6 Method group conversions................................................................................................................ 127 7. Expressions...................................................................................................................................... 131 7.1 Expression classifications................................................................................................................. 131 7.1.1 Values of expressions................................................................................................................ 132 7.2 Static and Dynamic Binding.............................................................................................................. 132 7.2.1 Binding-time.............................................................................................................................. 133 7.2.2 Dynamic binding........................................................................................................................ 133 7.2.3 Types of constituent expressions................................................................................................. 133 7.3 Operators........................................................................................................................................ 134 7.3.1 Operator precedence and associativity........................................................................................ 134 7.3.2 Operator overloading................................................................................................................. 135 7.3.3 Unary operator overload resolution............................................................................................. 136 7.3.4 Binary operator overload resolution............................................................................................. 137 7.3.5 Candidate user-defined operators................................................................................................ 137 7.3.6 Numeric promotions................................................................................................................... 137 7.3.6.1 Unary numeric promotions................................................................................................... 138 7.3.6.2 Binary numeric promotions................................................................................................... 138 7.3.7 Lifted operators......................................................................................................................... 139 7.4 Member lookup................................................................................................................................ 139 7.4.1 Base types................................................................................................................................ 141 7.5 Function members............................................................................................................................ 141 7.5.1 Argument lists........................................................................................................................... 143 7.5.1.1 Corresponding parameters.................................................................................................... 144 7.5.1.2 Run-time evaluation of argument lists.................................................................................... 145 7.5.2 Type inference.......................................................................................................................... 147 7.5.2.1 The first phase.................................................................................................................... 147 7.5.2.2 The second phase................................................................................................................ 148 7.5.2.3 Input types.......................................................................................................................... 148 7.5.2.4 Output types........................................................................................................................ 148 7.5.2.5 Dependence........................................................................................................................ 148 7.5.2.6 Output type inferences......................................................................................................... 148 7.5.2.7 Explicit parameter type inferences........................................................................................ 148 7.5.2.8 Exact inferences.................................................................................................................. 149 7.5.2.9 Lower-bound inferences...................................................................................................... 149 7.5.2.10 Upper-bound inferences..................................................................................................... 150 7.5.2.11 Fixing................................................................................................................................ 150 7.5.2.12 Inferred return type............................................................................................................ 150 7.5.2.13 Type inference for conversion of method groups.................................................................. 151 7.5.2.14 Finding the best common type of a set of expressions........................................................... 152 7.5.3 Overload resolution.................................................................................................................... 152 7.5.3.1 Applicable function member................................................................................................. 153 7.5.3.2 Better function member....................................................................................................... 153 7.5.3.3 Better conversion from expression........................................................................................ 154 7.5.3.4 Better conversion from type................................................................................................. 155 7.5.3.5 Better conversion target....................................................................................................... 155 7.5.3.6 Overloading in generic classes.............................................................................................. 155 7.5.4 Compile-time checking of dynamic overload resolution................................................................. 155 7.5.5 Function member invocation....................................................................................................... 156 7.5.5.1 Invocations on boxed instances............................................................................................. 157 7.6 Primary expressions......................................................................................................................... 157 7.6.1 Literals..................................................................................................................................... 158 7.6.2 Simple names............................................................................................................................ 158 7.6.2.1 Invariant meaning in blocks.................................................................................................. 159 7.6.3 Parenthesized expressions.......................................................................................................... 160 7.6.4 Member access......................................................................................................................... 161 7.6.4.1 Identical simple names and type names................................................................................. 162 7.6.4.2 Grammar ambiguities........................................................................................................... 163 7.6.5 Invocation expressions............................................................................................................... 164 7.6.5.1 Method invocations.............................................................................................................. 164 7.6.5.2 Extension method invocations............................................................................................... 165 7.6.5.3 Delegate invocations............................................................................................................ 168 7.6.6 Element access......................................................................................................................... 168 7.6.6.1 Array access....................................................................................................................... 168 7.6.6.2 Indexer access.................................................................................................................... 169 7.6.7 This access............................................................................................................................... 170 7.6.8 Base access.............................................................................................................................. 170 7.6.9 Postfix increment and decrement operators................................................................................. 171 7.6.10 The new operator.................................................................................................................... 172 7.6.10.1 Object creation expressions................................................................................................ 172 7.6.10.2 Object initializers................................................................................................................ 173 7.6.10.3 Collection initializers........................................................................................................... 175 7.6.10.4 Array creation expressions................................................................................................. 176 7.6.10.5 Delegate creation expressions............................................................................................. 178 7.6.10.6 Anonymous object creation expressions............................................................................... 180 7.6.11 The typeof operator................................................................................................................. 181 7.6.12 The checked and unchecked operators...................................................................................... 183 7.6.13 Default value expressions......................................................................................................... 185 7.6.14 Anonymous method expressions............................................................................................... 185 7.7 Unary operators............................................................................................................................... 186 7.7.1 Unary plus operator................................................................................................................... 186 7.7.2 Unary minus operator................................................................................................................ 186 7.7.3 Logical negation operator........................................................................................................... 187 7.7.4 Bitwise complement operator..................................................................................................... 187 7.7.5 Prefix increment and decrement operators.................................................................................. 187 7.7.6 Cast expressions........................................................................................................................ 188 7.8 Arithmetic operators........................................................................................................................ 189 7.8.1 Multiplication operator................................................................................................................ 189 7.8.2 Division operator....................................................................................................................... 190 7.8.3 Remainder operator................................................................................................................... 191 7.8.4 Addition operator....................................................................................................................... 192 7.8.5 Subtraction operator................................................................................................................... 194 7.9 Shift operators................................................................................................................................. 195 7.10 Relational and type-testing operators............................................................................................... 197 7.10.1 Integer comparison operators.................................................................................................... 197 7.10.2 Floating-point comparison operators.......................................................................................... 198 7.10.3 Decimal comparison operators.................................................................................................. 199 7.10.4 Boolean equality operators........................................................................................................ 199 7.10.5 Enumeration comparison operators............................................................................................ 199 7.10.6 Reference type equality operators............................................................................................. 199 7.10.7 String equality operators........................................................................................................... 201 7.10.8 Delegate equality operators...................................................................................................... 201 7.10.9 Equality operators and null........................................................................................................ 202 7.10.10 The is operator....................................................................................................................... 202 7.10.11 The as operator...................................................................................................................... 202 7.11 Logical operators........................................................................................................................... 203 7.11.1 Integer logical operators........................................................................................................... 204 7.11.2 Enumeration logical operators................................................................................................... 204 7.11.3 Boolean logical operators.......................................................................................................... 204 7.11.4 Nullable boolean logical operators............................................................................................. 204 7.12 Conditional logical operators............................................................................................................ 205 7.12.1 Boolean conditional logical operators......................................................................................... 206 7.12.2 User-defined conditional logical operators.................................................................................. 206 7.13 The null coalescing operator............................................................................................................ 206 7.14 Conditional operator....................................................................................................................... 207 7.15 Anonymous function expressions..................................................................................................... 208 7.15.1 Anonymous function signatures................................................................................................. 210 7.15.2 Anonymous function bodies...................................................................................................... 210 7.15.3 Overload resolution.................................................................................................................. 211 7.15.4 Anonymous functions and dynamic binding................................................................................ 211 7.15.5 Outer variables........................................................................................................................ 211 7.15.5.1 Captured outer variables..................................................................................................... 212 7.15.5.2 Instantiation of local variables............................................................................................. 212 7.15.6 Evaluation of anonymous function expressions........................................................................... 214 7.16 Query expressions.......................................................................................................................... 215 7.16.1 Ambiguities in query expressions............................................................................................... 216 7.16.2 Query expression translation..................................................................................................... 216 7.16.2.1 Select and groupby clauses with continuations...................................................................... 217 7.16.2.2 Explicit range variable types............................................................................................... 217 7.16.2.3 Degenerate query expressions............................................................................................ 218 7.16.2.4 From, let, where, join and orderby clauses............................................................................ 218 7.16.2.5 Select clauses.................................................................................................................... 221 7.16.2.6 Groupby clauses................................................................................................................ 222 7.16.2.7 Transparent identifiers........................................................................................................ 222 7.16.3 The query expression pattern.................................................................................................... 223 7.17 Assignment operators..................................................................................................................... 224 7.17.1 Simple assignment.................................................................................................................... 225 7.17.2 Compound assignment.............................................................................................................. 227 7.17.3 Event assignment..................................................................................................................... 228 7.18 Expression..................................................................................................................................... 228 7.19 Constant expressions...................................................................................................................... 228 7.20 Boolean expressions....................................................................................................................... 230 8. Statements........................................................................................................................................ 231 8.1 End points and reachability............................................................................................................... 231 8.2 Blocks............................................................................................................................................. 233 8.2.1 Statement lists........................................................................................................................... 233 8.3 The empty statement........................................................................................................................ 234 8.4 Labeled statements.......................................................................................................................... 234 8.5 Declaration statements..................................................................................................................... 235 8.5.1 Local variable declarations......................................................................................................... 235 8.5.2 Local constant declarations........................................................................................................ 236 8.6 Expression statements...................................................................................................................... 237 8.7 Selection statements......................................................................................................................... 237 8.7.1 The if statement........................................................................................................................ 237 8.7.2 The switch statement................................................................................................................. 238 8.8 Iteration statements.......................................................................................................................... 241 8.8.1 The while statement................................................................................................................... 242 8.8.2 The do statement....................................................................................................................... 242 8.8.3 The for statement...................................................................................................................... 243 8.8.4 The foreach statement............................................................................................................... 244 8.9 Jump statements.............................................................................................................................. 246 8.9.1 The break statement.................................................................................................................. 247 8.9.2 The continue statement.............................................................................................................. 248 8.9.3 The goto statement.................................................................................................................... 248 8.9.4 The return statement.................................................................................................................. 250 8.9.5 The throw statement.................................................................................................................. 250 8.10 The try statement........................................................................................................................... 251 8.11 The checked and unchecked statements.......................................................................................... 254 8.12 The lock statement......................................................................................................................... 254 8.13 The using statement....................................................................................................................... 255 8.14 The yield statement........................................................................................................................ 257 9. Namespaces...................................................................................................................................... 259 9.1 Compilation units.............................................................................................................................. 259 9.2 Namespace declarations................................................................................................................... 259 9.3 Extern aliases.................................................................................................................................. 260 9.4 Using directives............................................................................................................................... 261 9.4.1 Using alias directives................................................................................................................. 262 9.4.2 Using namespace directives....................................................................................................... 264 9.5 Namespace members....................................................................................................................... 266 9.6 Type declarations............................................................................................................................. 266 9.7 Namespace alias qualifiers............................................................................................................... 267 9.7.1 Uniqueness of aliases................................................................................................................. 268 10. Classes............................................................................................................................................ 269 10.1 Class declarations.......................................................................................................................... 269 10.1.1 Class modifiers........................................................................................................................ 269 10.1.1.1 Abstract classes................................................................................................................ 270 10.1.1.2 Sealed classes................................................................................................................... 270 10.1.1.3 Static classes..................................................................................................................... 270 10.1.2 Partial modifier........................................................................................................................ 271
|