You are on page 1of 14

Hejlsberg.

book Page i Friday, October 10, 2003 7:35 PM

The C# Programming Language


MS NET_SP_7.375x9.25.qxd 10/6/03 2:08 PM Page 1

Microsoft .NET Development Series


John Montgomery, Series Advisor
Don Box, Series Advisor
Martin Heller, Series Editor

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.

Titles in the Series


Brad Abrams, .NET Framework Standard Fritz Onion, Essential ASP.NET with
Library Annotated Reference Volume 1, 0-321- Examples in C#, 0-201-76040-1
15489-4
Fritz Onion, Essential ASP.NET with
Keith Ballinger, .NET Web Services: Examples in Visual Basic .NET, 0-201-76039-8
Architecture and Implementation, 0-321-
Ted Pattison and Dr. Joe Hummel, Building
11359-4
Applications and Components with Visual
Don Box with Chris Sells, Essential .NET, Basic .NET, 0-201-73495-8
Volume 1: The Common Language Runtime,
Chris Sells, Windows Forms Programming in
0-201-73411-7
C#, 0-321-11620-8
Mahesh Chand, Graphics Programming with
Chris Sells and Justin Gehtland, Windows
GDI+, 0-321-16077-0
Forms Programming in Visual Basic .NET,
Anders Hejlsberg, Scott Wiltamuth, Peter 0-321-12519-3
Golde, The C# Programming Language,
Damien Watkins, Mark Hammond,
0-321-15491-6
Brad Abrams, Programming in the .NET
Alex Homer, Dave Sussman, Mark Fussell, Environment, 0-201-77018-0
A First Look at ADO.NET and System.Xml v.
Shawn Wildermuth, Pragmatic
2.0, 0-321-22839-1
ADO.NET: Data Access for the
Alex Homer, Dave Sussman, Rob Howard, Internet World, 0-201-74568-2
A First Look at ASP.NET v. 2.0, 0-321-22896-0
James S. Miller and Susann Ragsdale, The
Common Language Infrastructure Annotated
Standard, 0-321-15493-2

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

Boston San Francisco New York Toronto Montreal


London Munich Paris Madrid
Capetown Sydney Tokyo Singapore Mexico City
Hejlsberg.book Page iv Friday, October 10, 2003 7:35 PM

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:

U.S. Corporate and Government Sales


(800) 382-3419
corpsales@pearsontechgroup.com

For sales outside of the U.S., please contact:

International Sales
(317 581-3793)
international@pearsontechgroup.com

Visit Addison-Wesley on the Web: www.awprofessional.com

Library of Congress Cataloging-in-Publication Data


Hejlsberg, Anders.
The C# programming language / Anders Hejlsberg, Scott Wiltamuth, Peter Golde.
p. cm.
Includes bibliographical references and index.
ISBN 0-321-15491-6 (alk. paper)
1. C# (Computer program language) I. Wiltamuth, Scott. II. Golde, Peter. III. Title.

QA76.76.C154H45 2003
005.133dc21 2003056094

Copyright 2004 by Microsoft Corporation.

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:

Pearson Education, Inc.


Rights and Contracts Department
75 Arlington Street, Suite 300
Boston, MA 02116
Fax: (617) 848-7047

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

7.5 Primary Expressions 170


7.6 Unary Operators 193
7.7 Arithmetic Operators 198
7.8 Shift Operators 207
7.9 Relational and Type-Testing Operators 209
7.10 Logical Operators 216
7.11 Conditional Logical Operators 218
7.12 Conditional Operator 220
7.13 Assignment Operators 221
7.14 Expression 226
7.15 Constant Expressions 226
7.16 Boolean Expressions 227

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

18 Unsafe Code 429


18.1 Unsafe Contexts 429
18.2 Pointer Types 433
18.3 Fixed and Moveable Variables 436
18.4 Pointer Conversions 437
18.5 Pointers in Expressions 438
18.6 The fixed Statement 446
18.7 Stack Allocation 450
18.8 Dynamic Memory Allocation 451

ix
Hejlsberg.book Page x Friday, October 10, 2003 7:35 PM

Contents

PART II C# 2.0 455


19 Introduction to C# 2.0 457
19.1 Generics 457
19.2 Anonymous Methods 463
19.3 Iterators 467
19.4 Partial Types 471

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

21 Anonymous Methods 525


21.1 Anonymous Method Expressions 525
21.2 Anonymous Method Signatures 525
21.3 Anonymous Method Conversions 526
21.4 Anonymous Method Blocks 528
21.5 Outer Variables 528
21.6 Anonymous Method Evaluation 532
21.7 Delegate Instance Equality 533
21.8 Definite Assignment 533
21.9 Method Group Conversions 534
21.10 Implementation Example 535

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

23 Partial Types 553


23.1 Partial Declarations 553
23.2 Name Binding 557

PART III Appendixes 559


A Documentation Comments 561
A.1 Introduction 561
B.2 Recommended Tags 563
B.3 Processing the Documentation File 572
B.4 An Example 577

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

Seattle, August 2003

xiv

You might also like