C# is a strongly typed language; therefore every variable and object must have a declared type.
A data type can be described as being either:
A built-in data type, such as an int or char, or
A user-defined data type, such as a class or interface.
Data types can also be defined as being either:
Value Types (C# Reference), which store values, or
Reference Types (C# Reference), which store references to the actual data.
For more information:
Casting (C# Programming Guide)
Boxing and Unboxing (C# Programming Guide)
Types (C# Reference)
Objects, Classes and Structs (C# Programming Guide)
For more information about types, see the following sections in the C# Language Specification:
1.3 Types and Variables
3.8 Namespace and Type Names
4.1 Value Types
4.2 Reference Types
4.3 Boxing and Unboxing