Professional Documents
Culture Documents
The Microsoft .NET Development Series is supported and developed by the leaders and
experts of Microsoft development technologies including Microsoft architects and
DevelopMentor instructors. The books in this series provide a core resource of information and
understanding every developer needs in order to write effective applications and managed
code. Learn from the leaders how to maximize your use of the .NET Framework and its
programming languages.
www.awprofessional.com/msdotnetseries/
Hejlsberg.book Page iii Friday, October 10, 2003 7:35 PM
The C#
Programming
Language
Anders Hejlsberg
Scott Wiltamuth
Peter Golde
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.
Where those designations appear in this book, and Addison-Wesley was aware of a trademark claim, the designations
have been printed with initial capital letters or in all capitals.
The .NET logo is either a registered trademark or trademark of Microsoft Corporation in the United States and/or other
countries and is used under license from Microsoft.
Microsoft, Windows, Visual Basic, Visual C#, and Visual C++ are either registered trademarks or trademarks of Microsoft
Corporation in the U.S.A. and/or other countries/regions.
The authors and publisher have taken care in the preparation of this book, but make no expressed or implied warranty of
any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential
damages in connection with or arising out of the use of the information or programs contained herein.
The publisher offers discounts on this book when ordered in quantity for special sales. For more information, please contact:
International Sales
(317 581-3793)
international@pearsontechgroup.com
QA76.76.C154H45 2003
005.133dc21 2003056094
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any
form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the
publisher. Printed in the United States of America. Published simultaneously in Canada.
For information on obtaining permission for use of material from this work, please submit a written request to:
ISBN 0-321-15491-6
Text printed on recycled paper
1 2 3 4 5 6 7 8 9 10CRW0706050403
First printing, October 2003
Hejlsberg.book Page v Friday, October 10, 2003 7:35 PM
Contents
Preface xiii
PART I C# 1.0 1
1 Introduction 3
1.1 Hello World 4
1.2 Program Structure 5
1.3 Types and Variables 7
1.4 Expressions 11
1.5 Statements 14
1.6 Classes and Objects 18
1.7 Structs 34
1.8 Arrays 35
1.9 Interfaces 37
1.10 Enums 39
1.11 Delegates 40
1.12 Attributes 42
2 Lexical Structure 45
2.1 Programs 45
2.2 Grammars 45
2.3 Lexical Analysis 47
2.4 Tokens 51
2.5 Preprocessing Directives 61
v
Hejlsberg.book Page vi Friday, October 10, 2003 7:35 PM
Contents
3 Basic Concepts 73
3.1 Application Startup 73
3.2 Application Termination 74
3.3 Declarations 75
3.4 Members 77
3.5 Member Access 79
3.6 Signatures and Overloading 86
3.7 Scopes 87
3.8 Namespace and Type Names 93
3.9 Automatic Memory Management 95
3.10 Execution Order 99
4 Types 101
4.1 Value Types 101
4.2 Reference Types 110
4.3 Boxing and Unboxing 112
5 Variables 115
5.1 Variable Categories 115
5.2 Default Values 119
5.3 Definite Assignment 119
5.4 Variable References 133
5.5 Atomicity of Variable References 133
6 Conversions 135
6.1 Implicit Conversions 135
6.2 Explicit Conversions 138
6.3 Standard Conversions 142
6.4 User-Defined Conversions 143
7 Expressions 147
7.1 Expression Classifications 147
7.2 Operators 149
7.3 Member Lookup 156
7.4 Function Members 157
vi
Hejlsberg.book Page vii Friday, October 10, 2003 7:35 PM
Contents
8 Statements 229
8.1 End Points and Reachability 230
8.2 Blocks 232
8.3 The Empty Statement 233
8.4 Labeled Statements 233
8.5 Declaration Statements 234
8.6 Expression Statements 236
8.7 Selection Statements 237
8.8 Iteration Statements 243
8.9 Jump Statements 248
8.10 The try Statement 255
8.11 The checked and unchecked Statements 258
8.12 The lock Statement 259
8.13 The using Statement 260
9 Namespaces 263
9.1 Compilation Units 263
9.2 Namespace Declarations 264
9.3 Using Directives 265
9.4 Namespace Members 271
9.5 Type Declarations 271
vii
Hejlsberg.book Page viii Friday, October 10, 2003 7:35 PM
Contents
10 Classes 273
10.1 Class Declarations 273
10.2 Class Members 277
10.3 Constants 287
10.4 Fields 290
10.5 Methods 299
10.6 Properties 317
10.7 Events 327
10.8 Indexers 333
10.9 Operators 338
10.10 Instance Constructors 343
10.11 Static Constructors 349
10.12 Destructors 352
11 Structs 355
11.1 Struct Declarations 355
11.2 Struct Members 356
11.3 Class and Struct Differences 357
11.4 Struct Examples 362
12 Arrays 367
12.1 Array Types 367
12.2 Array Creation 369
12.3 Array Element Access 369
12.4 Array Members 369
12.5 Array Covariance 369
12.6 Array Initializers 370
13 Interfaces 373
13.1 Interface Declarations 373
13.2 Interface Members 375
13.3 Fully Qualified Interface Member Names 380
13.4 Interface Implementations 380
viii
Hejlsberg.book Page ix Friday, October 10, 2003 7:35 PM
Contents
14 Enums 393
14.1 Enum Declarations 393
14.2 Enum Modifiers 394
14.3 Enum Members 394
14.4 The System.Enum Type 397
14.5 Enum Values and Operations 397
15 Delegates 399
15.1 Delegate Declarations 399
15.2 Delegate Instantiation 402
15.3 Delegate Invocation 403
16 Exceptions 407
16.1 Causes of Exceptions 407
16.2 The System.Exception Class 408
16.3 How Exceptions Are Handled 408
16.4 Common Exception Classes 409
17 Attributes 411
17.1 Attribute Classes 411
17.2 Attribute Specification 414
17.3 Attribute Instances 420
17.4 Reserved Attributes 422
17.5 Attributes for Interoperation 427
ix
Hejlsberg.book Page x Friday, October 10, 2003 7:35 PM
Contents
20 Generics 473
20.1 Generic Class Declarations 473
20.2 Generic Struct Declarations 484
20.3 Generic Interface Declarations 484
20.4 Generic Delegate Declarations 486
20.5 Constructed Types 487
20.6 Generic Methods 493
20.7 Constraints 500
20.8 Expressions and Statements 508
20.9 Revised Lookup Rules 511
20.10 Right-Shift Grammar Changes 522
x
Hejlsberg.book Page xi Friday, October 10, 2003 7:35 PM
Contents
22 Iterators 539
22.1 Iterator Blocks 539
22.2 Enumerator Objects 540
22.3 Enumerable Objects 544
22.4 The yield Statement 545
22.5 Implementation Example 547
B Grammar 583
B.1 Lexical Grammar 583
B.2 Syntactic Grammar 591
B.3 Grammar Extensions for Unsafe Code 614
Index 619
xi
Hejlsberg.book Page xii Friday, October 10, 2003 7:35 PM
Hejlsberg.book Page xiii Friday, October 10, 2003 7:35 PM
Preface
The C# project started almost five years ago, in December 1998, with the goal to create a
simple, modern, object-oriented, and type-safe programming language for the new and yet
to be named .NET platform. Since then, C# has come a long way. The language is now in
use by hundreds of thousands of programmers, it has been standardized by both ECMA
and ISO/IEC, and the development of a second version of the language with several major
new features is close to completion.
This book is a complete technical specification of the C# programming language. The book
is divided into three parts. Part I, C# 1.0, includes Chapters 118 and describes the C# 1.0
language, as delivered in Visual Studio .NET 2002 and 2003. Part II, C# 2.0, includes
Chapters 1923 and describes the four major new features of C# 2.0: generics, anonymous
methods, iterators, and partial types. Part III, Appendixes, describes documentation
comments and summarizes the lexical and syntactic grammars found in Part I of the book.
As of this writing, C# 2.0 is close to entering beta testing. Because C# 2.0 is still a work in
progress, some of the new features described in the second part of the book might change
in the final release. We do, however, expect any such changes to be minor.
Many people have been involved in the creation of the C# language. The language design
team for C# 1.0 consisted of Anders Hejlsberg, Scott Wiltamuth, Peter Golde, Peter Sollich,
and Eric Gunnerson. For C# 2.0, the language design team consisted of Anders Hejlsberg,
Peter Golde, Peter Hallam, Shon Katzenberger, Todd Proebsting, and Anson Horton.
Furthermore, the design and implementation of generics in C# and the .NET Common
Language Runtime is based on the Gyro prototype built by Don Syme and Andrew
Kennedy of Microsoft Research.
It is impossible to acknowledge all the people who have influenced the design of C#, but
we are nonetheless grateful to all of them. Nothing good gets designed in a vacuum, and
the constant feedback we receive from our large and enthusiastic user base is invaluable.
xiii
Hejlsberg.book Page xiv Friday, October 10, 2003 7:35 PM
Preface
C# has been and continues to be one of the most challenging and exciting projects on which
weve worked. We hope you enjoy using C# as much as we enjoyed creating it.
Anders Hejlsberg
Scott Wiltamuth
Peter Golde
xiv