SoFunction
Updated on 2025-03-07

Understand C# data types in one article

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!