Value Types and Reference Types
All C# types fall into the following categories:
Value types (struct, enum)
Reference types (class, array, delegate, interface)
Pointer types
The fundamental difference between the three main categories (value types, reference types, and pointer types) is how they are handled in memory. The following sections explain the essential differences between value types and reference types. Pointer types fall outside mainstream C# usage, and are covered later in Chapter 4.
Value Types
Value types are the easiest types to understand. They directly contain data, such as the int type (holds an integer), or the bool type (holds a true or false value). A value type’s key characteristic is when you assign one value to another, you make a copy of that value. For example:
using System; class Test { static void Main ( ) { int x = 3; int y = x; // assign x to y, y is now a copy of x x++; // increment x to 4 Console.WriteLine (y); // prints 3 } }
Reference Types
Reference types
are a little more complex. A reference
type really defines two separate entities: an object, and a reference
to that object. This example follows exactly the same pattern as our
previous example, but notice how the variable y
is
updated, while in our previous example, y
remained
unchanged:
using System; using System.Text; class Test { static void Main ( ) { StringBuilder x = new StringBuilder ("hello"); StringBuilder y = x; x.Append (" there"); Console.WriteLine (y); // prints "hello there" } }
This ...
Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.