资源说明:微软内部提供的详细描述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
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。