Biến trong C# được phân loại thành các kiểu: kiểu giá trị, kiểu tham chiếu và kiểu con trỏ.
Kiểu giá trị – value type
- Biến kiểu này có thể được gán giá trị trực tiếp. Chúng được bắt nguồn từ class ValueType
- Kiểu giá trị chứa dữ liệu trực tiếp. Ví dụ như kiểu int, char và float lần lượt chứa số, ký tự alphabet và số dấu chấm động. Khi ta khai báo một biến kiểu int, hệ thống cấp phát vùng nhớ để chứa giá trị.
- Dưới đây là danh sách kiểu dữ liệu trong C#
Kiểu | Biểu diễn | Dãy giá trị | Giá trị mặc định |
---|---|---|---|
bool | Giá trị Boolean | True hoặc False | False |
byte | Kiểu unsigned integer (8 bit) | 0 tới 255 | 0 |
char | Kiểu Unicode character (16 bit) | U +0000 tới U +ffff | ‘\0’ |
decimal | Kiểu thập phân (128 bit) | (-7.9 x 1028 tới 7.9 x 1028) / 100 to 28 | 0.0M |
double | Kiểu double (64 bit) | (+/-)5.0 x 10-324 tới (+/-)1.7 x 10308 | 0.0D |
float | Kiểu float (32 bit) | -3.4 x 1038 tới + 3.4 x 1038 | 0.0F |
int | Kiểu integer (32 bit) | -2,147,483,648 tới 2,147,483,647 | 0 |
long | Kiểu signed integer (64 bit) | -9,223,372,036,854,775,808 tới 9,223,372,036,854,775,807 | 0L |
sbyte | Kiểu signed integer (8 bit) | -128 tới 127 | 0 |
short | Kiểu signed integer (16 bit) | -32,768 tới 32,767 | 0 |
uint | Kiểu unsigned integer (32 bit) | 0 tới 4,294,967,295 | 0 |
ulong | Kiểu unsigned integer (64 bit) | 0 tới 18,446,744,073,709,551,615 | 0 |
ushort | Kiểu unsigned integer (16 bit) | 0 tới 65,535 | 0 |
- Để biết chính xác độ lớn của một kiểu dữ liệu hoặc một biến bạn có thể sử dụng phương thức sizeof. Biểu thức sizeof(type) trả về kích thước lưu trữ của đối tượng hoặc kiểu theo đơn vị byte. Sau đây là một ví dụ để lấy kích thước của biến kiểu int:
using System; namespace DataTypeApplication { class Program { static void Main(string[] args) { Console.WriteLine("Kich thuoc kieu du lieu int: {0}", sizeof(int)); Console.ReadLine(); } } }
Kết quả khi biên dịch và thực thi đoạn code trên là dòng chữ:
Kich thuoc kieu du lieu int: 4
Kích thước một số kiểu dữ liệu
Name | CTS Type | Size |
sbyte | System.SByte | 8 |
short | System.Int16 | 16 |
int | Sytem. Int32 | 32 |
long | Sytem. Int64 | 64 |
byte | System.SByte | 8 |
ushort | System.UInt16 | 16 |
uint | System.UInt32 | 32 |
ulong | System.UInt64 | 64 |
float | System.Single | 32 |
double | System.Double | 64 |
decimal | System.Decimal | 128 |
bool | System.Boolean | |
char | System.Char | 16 |
Kiểu tham chiếu – reference type
Kiểu này không chứa dữ liệu thực sự mà nó chứa một sự tham khảo trong biến. Nói cách khác, nó tham chiếu tới một vùng nhớ. Kiểu tham chiếu có thể tạo ra nhiều biến cùng tham chiếu đến một vùng nhớ. Nếu dữ liệu trong vùng nhớ bị thay đổi bới một biến nào đó, thì những biến khác cũng sẽ thay đổi giá trị một cách tự động. Ví dụ object, dynamic và string là kiểu tham chiếu.
- Kiểu object: là class nền tảng cơ bản cho mọi kiểu dữ liệu trong C# common type system (CTS). Object là một bí danh của class Object. Kiểu object có thể gán giá trị của mọi kiểu dữ liệu khác, kiểu giá trị, kiểu tham chiếu, kiểu định nghĩa trước hoặc do người dùng định nghĩa. Tuy nhiên trước khi gán giá trị, nó cần chuyển kiểu. Khi chuyển kiểu value sang object, đó được gọi là boxing và mặt khác, khi kiểu object được chuyển sang kiểu value được gọi là unboxing.
Ví dụ:
object obj; obj = 100; // this is boxing
- Kiểu dynamic: ta có thể lưu bất kỳ kiểu giá trị nào trong biến kiểu dữ liệu động. Kiểm tra kiểu cho kiểu của biến dynamic diễn ra vào thời gian chạy. Cú pháp để khai báo biến kiểu dynamic là:
dynamic <variable_name> = value;
Kiểu dynamic tương tự kiểu object ngoại trừ kiểm tra kiểu cho kiểu biến object diễn ra tại thời điểm biên dịch, nhưng trái lại kiểm tra kiểu cho kiểu dynamic diễn ra vào thời gian chạy.
- Kiểu string: cho phép gán giá trị là chuỗi vào biến. Kiểu string là một bí danh của class String. Nó có nguồn gốc từ kiểu object. Giá trị gán sử dụng một trong 2 cách quoted và @quoted.
Ví dụ:
String str = "sinhvientot.net";-> quoted @"sinhvientot.net";->@quoted
- Những kiểu tham chiếu do người dùng định nghĩa là class, interface hoặc delegate.
Kiểu con trỏ – pointer type
Biến kiểu con trỏ lưu địa chỉ bộ nhớ của kiểu khác. Con trỏ trong C# có cùng khả năng như con trỏ trong C hoặc C++. Cú pháp để khai báo biến kiểu con trỏ là: type* identifier,
Ví dụ:
char* cptr; int* iptr;
Xem thêm Bài 05: Cách chuyển kiểu dữ liệu (Type Conversion) trong C#