C# 语言规格说明(English Edition第五版)
文件大小: 776k
源码售价: 10 个金币 积分规则     积分充值
资源说明:微软内部提供的详细描述C#语言结构和使用的文档,想做高级独立资深开发的不可错误,另外,此文档为英文原文版。建议作为平时学习阅读之用 目录: Table of Contents 1. Introduction 1 1.1 Hello world 1 1.2 Program structure 2 1.3 Types and variables 4 1.4 Expressions 6 1.5 Statements 8 1.6 Classes and objects 12 1.6.1 Members 12 1.6.2 Accessibility 13 1.6.3 Type parameters 13 1.6.4 Base classes 14 1.6.5 Fields 14 1.6.6 Methods 15 1.6.6.1 Parameters 15 1.6.6.2 Method body and local variables 16 1.6.6.3 Static and instance methods 17 1.6.6.4 Virtual, override, and abstract methods 18 1.6.6.5 Method overloading 20 1.6.7 Other function members 21 1.6.7.1 Constructors 22 1.6.7.2 Properties 23 1.6.7.3 Indexers 23 1.6.7.4 Events 24 1.6.7.5 Operators 24 1.6.7.6 Destructors 25 1.7 Structs 25 1.8 Arrays 26 1.9 Interfaces 27 1.10 Enums 29 1.11 Delegates 30 1.12 Attributes 31 2. Lexical structure 33 2.1 Programs 33 2.2 Grammars 33 2.2.1 Grammar notation 33 2.2.2 Lexical grammar 34 2.2.3 Syntactic grammar 34 2.3 Lexical analysis 34 2.3.1 Line terminators 35 2.3.2 Comments 35 2.3.3 White space 37 2.4 Tokens 37 2.4.1 Unicode character escape sequences 37 2.4.2 Identifiers 38 2.4.3 Keywords 39 2.4.4 Literals 40 2.4.4.1 Boolean literals 40 2.4.4.2 Integer literals 40 2.4.4.3 Real literals 41 2.4.4.4 Character literals 42 2.4.4.5 String literals 43 2.4.4.6 The null literal 45 2.4.5 Operators and punctuators 45 2.5 Pre-processing directives 45 2.5.1 Conditional compilation symbols 46 2.5.2 Pre-processing expressions 47 2.5.3 Declaration directives 47 2.5.4 Conditional compilation directives 48 2.5.5 Diagnostic directives 51 2.5.6 Region directives 51 2.5.7 Line directives 52 2.5.8 Pragma directives 52 2.5.8.1 Pragma warning 53 3. Basic concepts 55 3.1 Application Startup 55 3.2 Application termination 56 3.3 Declarations 56 3.4 Members 58 3.4.1 Namespace members 58 3.4.2 Struct members 59 3.4.3 Enumeration members 59 3.4.4 Class members 59 3.4.5 Interface members 60 3.4.6 Array members 60 3.4.7 Delegate members 60 3.5 Member access 60 3.5.1 Declared accessibility 60 3.5.2 Accessibility domains 61 3.5.3 Protected access for instance members 63 3.5.4 Accessibility constraints 64 3.6 Signatures and overloading 65 3.7 Scopes 66 3.7.1 Name hiding 69 3.7.1.1 Hiding through nesting 69 3.7.1.2 Hiding through inheritance 70 3.8 Namespace and type names 71 3.8.1 Fully qualified names 73 3.9 Automatic memory management 73 3.10 Execution order 76 4. Types 77 4.1 Value types 77 4.1.1 The System.ValueType type 78 4.1.2 Default constructors 78 4.1.3 Struct types 79 4.1.4 Simple types 79 4.1.5 Integral types 80 4.1.6 Floating point types 81 4.1.7 The decimal type 82 4.1.8 The bool type 83 4.1.9 Enumeration types 83 4.1.10 Nullable types 83 4.2 Reference types 83 4.2.1 Class types 84 4.2.2 The object type 85 4.2.3 The dynamic type 85 4.2.4 The string type 85 4.2.5 Interface types 85 4.2.6 Array types 85 4.2.7 Delegate types 85 4.3 Boxing and unboxing 86 4.3.1 Boxing conversions 86 4.3.2 Unboxing conversions 87 4.4 Constructed types 88 4.4.1 Type arguments 89 4.4.2 Open and closed types 89 4.4.3 Bound and unbound types 89 4.4.4 Satisfying constraints 89 4.5 Type parameters 90 4.6 Expression tree types 91 4.7 The dynamic type 92 5. Variables 93 5.1 Variable categories 93 5.1.1 Static variables 93 5.1.2 Instance variables 93 5.1.2.1 Instance variables in classes 93 5.1.2.2 Instance variables in structs 94 5.1.3 Array elements 94 5.1.4 Value parameters 94 5.1.5 Reference parameters 94 5.1.6 Output parameters 94 5.1.7 Local variables 95 5.2 Default values 96 5.3 Definite assignment 96 5.3.1 Initially assigned variables 97 5.3.2 Initially unassigned variables 97 5.3.3 Precise rules for determining definite assignment 97 5.3.3.1 General rules for statements 98 5.3.3.2 Block statements, checked, and unchecked statements 98 5.3.3.3 Expression statements 98 5.3.3.4 Declaration statements 98 5.3.3.5 If statements 98 5.3.3.6 Switch statements 99 5.3.3.7 While statements 99 5.3.3.8 Do statements 99 5.3.3.9 For statements 100 5.3.3.10 Break, continue, and goto statements 100 5.3.3.11 Throw statements 100 5.3.3.12 Return statements 100 5.3.3.13 Try-catch statements 100 5.3.3.14 Try-finally statements 101 5.3.3.15 Try-catch-finally statements 101 5.3.3.16 Foreach statements 102 5.3.3.17 Using statements 102 5.3.3.18 Lock statements 102 5.3.3.19 Yield statements 103 5.3.3.20 General rules for simple expressions 103 5.3.3.21 General rules for expressions with embedded expressions 103 5.3.3.22 Invocation expressions and object creation expressions 103 5.3.3.23 Simple assignment expressions 104 5.3.3.24 && expressions 104 5.3.3.25 || expressions 105 5.3.3.26 ! expressions 106 5.3.3.27 ?? expressions 106 5.3.3.28 ?: expressions 106 5.3.3.29 Anonymous functions 107 5.4 Variable references 107 5.5 Atomicity of variable references 107 6. Conversions 109 6.1 Implicit conversions 109 6.1.1 Identity conversion 109 6.1.2 Implicit numeric conversions 110 6.1.3 Implicit enumeration conversions 110 6.1.4 Implicit nullable conversions 110 6.1.5 Null literal conversions 111 6.1.6 Implicit reference conversions 111 6.1.7 Boxing conversions 111 6.1.8 Implicit dynamic conversions 112 6.1.9 Implicit constant expression conversions 112 6.1.10 Implicit conversions involving type parameters 112 6.1.11 User-defined implicit conversions 113 6.1.12 Anonymous function conversions and method group conversions 113 6.2 Explicit conversions 113 6.2.1 Explicit numeric conversions 114 6.2.2 Explicit enumeration conversions 115 6.2.3 Explicit nullable conversions 115 6.2.4 Explicit reference conversions 116 6.2.5 Unboxing conversions 117 6.2.6 Explicit dynamic conversions 117 6.2.7 Explicit conversions involving type parameters 118 6.2.8 User-defined explicit conversions 119 6.3 Standard conversions 119 6.3.1 Standard implicit conversions 119 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 10.1.3 Type parameters 271 10.1.4 Class base specification 272 10.1.4.1 Base classes 272 10.1.4.2 Interface implementations 274 10.1.5 Type parameter constraints 274 10.1.6 Class body 278 10.2 Partial types 278 10.2.1 Attributes 278 10.2.2 Modifiers 279 10.2.3 Type parameters and constraints 279 10.2.4 Base class 280 10.2.5 Base interfaces 280 10.2.6 Members 280 10.2.7 Partial methods 281 10.2.8 Name binding 283 10.3 Class members 283 10.3.1 The instance type 285 10.3.2 Members of constructed types 285 10.3.3 Inheritance 286 10.3.4 The new modifier 287 10.3.5 Access modifiers 287 10.3.6 Constituent types 287 10.3.7 Static and instance members 287 10.3.8 Nested types 288 10.3.8.1 Fully qualified name 289 10.3.8.2 Declared accessibility 289 10.3.8.3 Hiding 289 10.3.8.4 this access 290 10.3.8.5 Access to private and protected members of the containing type 290 10.3.8.6 Nested types in generic classes 291 10.3.9 Reserved member names 292 10.3.9.1 Member names reserved for properties 292 10.3.9.2 Member names reserved for events 293 10.3.9.3 Member names reserved for indexers 293 10.3.9.4 Member names reserved for destructors 293 10.4 Constants 293 10.5 Fields 295 10.5.1 Static and instance fields 296 10.5.2 Readonly fields 297 10.5.2.1 Using static readonly fields for constants 297 10.5.2.2 Versioning of constants and static readonly fields 298 10.5.3 Volatile fields 298 10.5.4 Field initialization 299 10.5.5 Variable initializers 300 10.5.5.1 Static field initialization 301 10.5.5.2 Instance field initialization 302 10.6 Methods 302 10.6.1 Method parameters 304 10.6.1.1 Value parameters 306 10.6.1.2 Reference parameters 306 10.6.1.3 Output parameters 307 10.6.1.4 Parameter arrays 308 10.6.2 Static and instance methods 310 10.6.3 Virtual methods 310 10.6.4 Override methods 312 10.6.5 Sealed methods 314 10.6.6 Abstract methods 315 10.6.7 External methods 316 10.6.8 Partial methods 317 10.6.9 Extension methods 317 10.6.10 Method body 318 10.6.11 Method overloading 318 10.7 Properties 318 10.7.1 Static and instance properties 320 10.7.2 Accessors 320 10.7.3 Automatically implemented properties 325 10.7.4 Accessibility 325 10.7.5 Virtual, sealed, override, and abstract accessors 327 10.8 Events 328 10.8.1 Field-like events 330 10.8.2 Event accessors 331 10.8.3 Static and instance events 332 10.8.4 Virtual, sealed, override, and abstract accessors 333 10.9 Indexers 333 10.9.1 Indexer overloading 336 10.10 Operators 337 10.10.1 Unary operators 338 10.10.2 Binary operators 339 10.10.3 Conversion operators 339 10.11 Instance constructors 342 10.11.1 Constructor initializers 343 10.11.2 Instance variable initializers 343 10.11.3 Constructor execution 344 10.11.4 Default constructors 345 10.11.5 Private constructors 346 10.11.6 Optional instance constructor parameters 346 10.12 Static constructors 347 10.13 Destructors 349 10.14 Iterators 350 10.14.1 Enumerator interfaces 350 10.14.2 Enumerable interfaces 351 10.14.3 Yield type 351 10.14.4 Enumerator objects 351 10.14.4.1 The MoveNext method 351 10.14.4.2 The Current property 352 10.14.4.3 The Dispose method 353 10.14.5 Enumerable objects 353 10.14.5.1 The GetEnumerator method 353 10.14.6 Implementation example 354 11. Structs 360 11.1 Struct declarations 360 11.1.1 Struct modifiers 360 11.1.2 Partial modifier 361 11.1.3 Struct interfaces 361 11.1.4 Struct body 361 11.2 Struct members 361 11.3 Class and struct differences 361 11.3.1 Value semantics 362 11.3.2 Inheritance 363 11.3.3 Assignment 363 11.3.4 Default values 363 11.3.5 Boxing and unboxing 364 11.3.6 Meaning of this 365 11.3.7 Field initializers 365 11.3.8 Constructors 366 11.3.9 Destructors 367 11.3.10 Static constructors 367 11.4 Struct examples 367 11.4.1 Database integer type 367 11.4.2 Database boolean type 369 12. Arrays 371 12.1 Array types 371 12.1.1 The System.Array type 372 12.1.2 Arrays and the generic IList interface 372 12.2 Array creation 372 12.3 Array element access 373 12.4 Array members 373 12.5 Array covariance 373 12.6 Array initializers 373 13. Interfaces 377 13.1 Interface declarations 377 13.1.1 Interface modifiers 377 13.1.2 Partial modifier 377 13.1.3 Variant type parameter lists 378 13.1.3.1 Variance safety 378 13.1.3.2 Variance conversion 379 13.1.4 Base interfaces 379 13.1.5 Interface body 380 13.2 Interface members 380 13.2.1 Interface methods 381 13.2.2 Interface properties 381 13.2.3 Interface events 382 13.2.4 Interface indexers 382 13.2.5 Interface member access 382 13.3 Fully qualified interface member names 384 13.4 Interface implementations 384 13.4.1 Explicit interface member implementations 385 13.4.2 Uniqueness of implemented interfaces 387 13.4.3 Implementation of generic methods 388 13.4.4 Interface mapping 389 13.4.5 Interface implementation inheritance 392 13.4.6 Interface re-implementation 393 13.4.7 Abstract classes and interfaces 394 14. Enums 397 14.1 Enum declarations 397 14.2 Enum modifiers 397 14.3 Enum members 398 14.4 The System.Enum type 400 14.5 Enum values and operations 400 15. Delegates 401 15.1 Delegate declarations 401 15.2 Delegate compatibility 403 15.3 Delegate instantiation 403 15.4 Delegate invocation 404 16. Exceptions 407 16.1 Causes of exceptions 407 16.2 The System.Exception class 407 16.3 How exceptions are handled 407 16.4 Common Exception Classes 408 17. Attributes 409 17.1 Attribute classes 409 17.1.1 Attribute usage 409 17.1.2 Positional and named parameters 410 17.1.3 Attribute parameter types 411 17.2 Attribute specification 411 17.3 Attribute instances 416 17.3.1 Compilation of an attribute 416 17.3.2 Run-time retrieval of an attribute instance 417 17.4 Reserved attributes 417 17.4.1 The AttributeUsage attribute 417 17.4.2 The Conditional attribute 418 17.4.2.1 Conditional methods 418 17.4.2.2 Conditional attribute classes 420 17.4.3 The Obsolete attribute 421 17.5 Attributes for Interoperation 422 17.5.1 Interoperation with COM and Win32 components 422 17.5.2 Interoperation with other .NET languages 423 17.5.2.1 The IndexerName attribute 423 18. Unsafe code 425 18.1 Unsafe contexts 425 18.2 Pointer types 427 18.3 Fixed and moveable variables 430 18.4 Pointer conversions 430 18.4.1 Pointer arrays 431 18.5 Pointers in expressions 432 18.5.1 Pointer indirection 433 18.5.2 Pointer member access 433 18.5.3 Pointer element access 434 18.5.4 The address-of operator 434 18.5.5 Pointer increment and decrement 435 18.5.6 Pointer arithmetic 435 18.5.7 Pointer comparison 436 18.5.8 The sizeof operator 437 18.6 The fixed statement 437 18.7 Fixed size buffers 441 18.7.1 Fixed size buffer declarations 441 18.7.2 Fixed size buffers in expressions 442 18.7.3 Definite assignment checking 443 18.8 Stack allocation 443 18.9 Dynamic memory allocation 444 A. Documentation comments 447 A.1 Introduction 447 A.2 Recommended tags 448 A.2.1 449 A.2.2 449 A.2.3 450 A.2.4 450 A.2.5 451 A.2.6 451 A.2.7 452 A.2.8 453 A.2.9 453 A.2.10 453 A.2.11 454 A.2.12 454 A.2.13 455 A.2.14 455 A.2.15 455 A.2.16 456 A.2.17 456 A.2.18 456 A.3 Processing the documentation file 457 A.3.1 ID string format 457 A.3.2 ID string examples 458 A.4 An example 462 A.4.1 C# source code 462 A.4.2 Resulting XML 464 B. Grammar 468 B.1 Lexical grammar 468 B.1.1 Line terminators 468 B.1.2 Comments 468 B.1.3 White space 469 B.1.4 Tokens 469 B.1.5 Unicode character escape sequences 469 B.1.6 Identifiers 469 B.1.7 Keywords 470 B.1.8 Literals 471 B.1.9 Operators and punctuators 473 B.1.10 Pre-processing directives 473 B.2 Syntactic grammar 475 B.2.1 Basic concepts 475 B.2.2 Types 475 B.2.3 Variables 477 B.2.4 Expressions 477 B.2.5 Statements 484 B.2.6 Namespaces 487 B.2.7 Classes 488 B.2.8 Structs 495 B.2.9 Arrays 496 B.2.10 Interfaces 496 B.2.11 Enums 497 B.2.12 Delegates 498 B.2.13 Attributes 498 B.3 Grammar extensions for unsafe code 500 C. References 503
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。