Tất cả kiểu trong C# chia thành 2 loại chính: Value Types (kiểu giá trị) và Reference Types (kiểu tham chiếu).
Value Types (Kiểu giá trị)
Biến kiểu giá trị chứa trực tiếp dữ liệu. Mỗi biến có bản sao riêng → không thể biến này sửa đổi object của biến kia.
Kiểu giá trị bao gồm:
- Tất cả kiểu số: int, float, double
- char và bool
- struct
- enum
Kiểu giá trị chứa trực tiếp giá trị (số thực tế), không phải con trỏ như reference type.
Tạo custom value type bằng struct:
public struct Point { public int X; public int Y; }
var p1 = new Point();
Trong bộ nhớ, instance Point biểu diễn như sau:

Gán biến kiểu giá trị cho biến khác → tạo bản sao giá trị:
Point p2 = p1;

Reference Types (Kiểu tham chiếu)
Biến kiểu tham chiếu lưu tham chiếu (reference) đến object. Có thể 2 biến khác nhau tham chiếu cùng 1 object. Thay đổi qua biến này thấy được qua biến kia.
Kiểu tham chiếu bao gồm:
- String
- Class
- Array
- Delegate
- Interface
Tạo class (reference type):
public class Point { public int X; public int Y; }
var p1 = new Point();

Gán biến kiểu tham chiếu → copy reference, KHÔNG copy object:
Point p2 = p1;

Ví dụ so sánh
using System;
class Program
{
static void Main()
{
// Value type
var p1 = new Point { X = 10 };
Point p2 = p1;
p2.X = 20;
Console.WriteLine("Value Type");
Console.WriteLine(p1.X); // 10
Console.WriteLine(p2.X); // 20
// Reference type
var u1 = new User { Age = 10 };
User u2 = u1;
u2.Age = 20;
Console.WriteLine("Reference Type");
Console.WriteLine(u1.Age); // 20
Console.WriteLine(u2.Age); // 20
}
}
public struct Point { public int X; public int Y; }
public class User { public int Age { get; set; } }
Kết quả đầu ra
Value Type
10
20
Reference Type
20
20