Data types in C# divided into three categories
- Value Data Types
- Reference Data Types
- Pointer Data Type
The Value Data Types variable assigns a value directly and stores the
value in memory. The derived class for these data types is System.ValueType.
E.g.: int, char, bool, and float, which store numbers, alphabets, boolean, and floating-point numbers, respectively.
When you declare an int type, the system allocates memory to store the value.
Also, enum types, struct types, and Nullable value types come under Value Data Type.
Following list shows the range and default values:
Type |
Description |
Range |
Default Value |
bool |
Boolean value |
True or False |
False |
byte |
8-bit unsigned integer |
0 to 255 |
0 |
char |
16-bit Unicode character |
U +0000 to U +ffff |
'\0' |
decimal |
128-bit precise decimal values with 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 |
Sample Program:
The output will be:
The reference types won’t store the value directly instead they store the memory
address of the variable value. In other words, they refer to a memory location.
Reference types include class types, interface types, delegate types, and array types.
The built-in reference types are string, object.
- String: Represents a sequence of Unicode characters and its type name is System.String
Example: string s1 = "hello world";
- Object: It is the base class for all the data types in C#.
All types, reference types, and value types inherit directly or indirectly from Object class.
So before assigning values, it needs type conversion. This conversion is called boxing and unboxing.
Boxing: When a variable of a value type is converted to an object.
UnBoxing: When an object type is converted to a value type.
The Pointer Data Types will contain a memory address of the variable value.
Pointers in C# have the same capabilities as the pointers in C or C++.
It uses ampersand (&) to get the address and asterisk (*) to access the value of an address.
Syntax : type* identifier;
Example :
int* t1, t2;
char* ptr;