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 is because ...
Get C# in a Nutshell 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.