Chapter
Chapter
Chapter
Chapter 18
18
18
18 Unsafe
Unsafe
Unsafe
Unsafe code
code
code
code
Copyright
Copyright
Copyright
Copyright Microsoft
Microsoft
Microsoft
Microsoft Corporation
Corporation
Corporation
Corporation 1999-2010.
1999-2010.
1999-2010.
1999-2010. All
All
All
All Rights
Rights
Rights
Rights Reserved.
Reserved.
Reserved.
Reserved.
1
1
1
1
1.
1.
1.
1. Introduction
Introduction
Introduction
Introduction
C# (pronounced “ See Sharp ” ) is a simple, modern, object-oriented, and type-safe programming language. C#
has its roots in the C family of languages and will be immediately familiar to C, C++, and Java programmers.
C# is standardized by ECMA International as the
ECMA-334
ECMA-334
ECMA-334
ECMA-334
standard and by ISO/IEC as the
ISO/IEC
ISO/IEC
ISO/IEC
ISO/IEC 23270
23270
23270
23270
standard. Microsoft ’ s C# compiler for the .NET Framework is a conforming implementation of both of these
standards.
C# is an object-oriented language, but C# further includes support for
component-oriented
component-oriented
component-oriented
component-oriented
programming.
Contemporary software design increasingly relies on software components in the form of self-contained and
self-describing packages of functionality. Key to such components is that they present a programming model
with properties, methods, and events; they have attributes that provide declarative information about the
component; and they incorporate their own documentation. C# provides language constructs to directly support
these concepts, making C# a very natural language in which to create and use software components.
Several C# features aid in the construction of robust and durable applications:
Garbage
Garbage
Garbage
Garbage collection
collection
collection
collection
automatically
reclaims memory occupied by unused objects;
exception
exception
exception
exception handling
handling
handling
handling
provides a structured and extensible
approach to error detection and recovery; and the
type-safe
type-safe
type-safe
type-safe
design of the language makes it impossible to read
from uninitialized variables, to index arrays beyond their bounds, or to perform unchecked type casts.
C# has a
unified
unified
unified
unified type
type
type
type system
system
system
system
. All C# types, including primitive types such as int and double , inherit from a
single root object type. Thus, all types share a set of common operations, and values of any type can be stored,
transported, and operated upon in a consistent manner. Furthermore, C# supports both user-defined reference
types and value types, allowing dynamic allocation of objects as well as in-line storage of lightweight structures.
To ensure that C# programs and libraries can evolve over time in a compatible manner, much emphasis has been
placed on
versioning
versioning
versioning
versioning
in C# ’ s design. Many programming languages pay little attention to this issue, and, as a
result, programs written in those languages break more often than necessary when newer versions of dependent
libraries are introduced. Aspects of C# ’ s design that were directly influenced by versioning considerations
include the separate virtual and override modifiers, the rules for method overload resolution, and support
for explicit interface member declarations.
The rest of this chapter describes the essential features of the C# language. Although later chapters describe
rules and exceptions in a detail-oriented and sometimes mathematical manner, this chapter strives for clarity and
brevity at the expense of completeness. The intent is to provide the reader with an introduction to the language
that will facilitate the writing of early programs and the reading of later chapters.
1.1
1.1
1.1
1.1 Hello
Hello
Hello
Hello world
world
world
world
The “ Hello, World ” program is traditionally used to introduce a programming language. Here it is in C#:
using System;
class Hello
{
static void Main() {
Console.WriteLine("Hello, World");
}
}
C# source files typically have the file extension
.cs
. Assuming that the “ Hello, World ” program is stored in the
file hello.cs , the program can be compiled with the Microsoft C# compiler using the command line