In C#, variables are divided into the following types:
- Value types
- Reference types
- Pointer types
Value types
Value type variables can be assigned directly to a value. They are derived from classes.
The value type directly contains the data. For example, int, char, and float, they store numbers, characters, and floating point numbers respectively. When you declare an int type, the system allocates memory to store the value.
The following table lists the available value types in C# 2010:
type | describe | scope | default value |
bool | Boolean value | True or False | False |
byte | 8-bit unsigned integer | 0 to 255 | 0 |
char | 16-bit Unicode characters | U +0000 to U +ffff | '\0' |
decimal | 128 exact decimal value, 28-29 significant digits | (-7.9 x 1028 to 7.9 x 1028) / 100 to 28 | 0.0M |
double | 64-bit double precision floating point type | (+/-)5.0 x 10-324 to (+/-)1.7 x 10308 | 0.0D |
float | 32-bit single-precision floating point type | -3.4 x 1038 to +3.4 x 1038 | 0.0F |
int | 32-bit signed integer type | -2,147,483,648 to 2,147,483,647 | 0 |
long | 64-bit signed integer type | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 0L |
sbyte | 8-bit signed integer type | -128 to 127 | 0 |
short | 16-bit signed integer type | -32,768 to 32,767 | 0 |
uint | 32-bit unsigned integer type | 0 to 4,294,967,295 | 0 |
ulong | 64-bit unsigned integer type | 0 to 18,446,744,073,709,551,615 | 0 |
ushort | 16-bit unsigned integer type | 0 to 65,535 | 0 |
To get the exact size of a type or a variable on a specific platform, you can use the sizeof method. The expression sizeof(type) produces a storage size that stores objects or types in bytes. The following example is to obtain the storage size of type int on any machine:
using System; namespace DataTypeApplication { class Program { static void Main(string[] args) { ("Size of int: {0}", sizeof(int)); (); } } }
When the above code is compiled and executed, it produces the following results:
Size of int: 4
Reference types
Reference types do not contain the actual data stored in the variable, but they contain references to the variable.
In other words, they refer to a memory location. When using multiple variables, the reference type can point to a memory location. If the data at the memory location is changed by one variable, the other variables will automatically reflect the change in this value. Built-in reference types are: object, dynamic and string.
Object type
Object type is the ultimate base class for all data types in the C# Common Type System - CTS. Object is an alias for the class. Therefore, the object type can be assigned a value of any other type (value type, reference type, predefined type, or user-defined type). However, before assigning values, type conversion is required.
When a value type is converted to an object type, it is called boxing; on the other hand, when an object type is converted to a value type, it is called unboxing.
object obj; obj = 100; // This is packing
Dynamic Type
You can store any type of value in a dynamic data type variable. Type checking of these variables occurs at runtime.
Syntax for declaring dynamic types:
dynamic <variable_name> = value;
For example:
dynamic d = 20;
Dynamic types are similar to object types, but type checking for object type variables occurs at compile time, while type checking for dynamic type variables occurs at runtime.
String type
String type Allows you to assign any string value to a variable. The String type is an alias for the class. It is derived from the object type. Values of type String can be assigned in two forms: quotes and @ quotes.
For example:
String str = "";
A @ quote string:
@"";
C# string string can be preceded by @ (called "word-by-word string") to treat escaped characters (\) as normal characters, such as:
string str = @"C:\Windows";
Equivalent to:
string str = "C:\\Windows";
@ You can have any newline in a string, and the newline and indented spaces are calculated within the length of the string.
string str = @"<script type=""text/javascript"">
<!--
-->
</script>";
User-defined reference types are: class, interface or delegate. We will discuss these types in future chapters.
Pointer types
Pointer type variable stores another type of memory address. Pointers in C# have the same functions as pointers in C or C++.
Syntax for declaring pointer types:
type* identifier;
For example:
char* cptr;
int* iptr;
The above is a detailed content of understanding the C# data type in one article. For more information about C# data type, please follow my other related articles!