Nói chung, tất cả các loại trong C # có thể được chia thành hai loại chính - loại giá trị và loại tham chiếu . Hãy xem xét chi tiết từng loại.
Loại giá trị
Các biến của loại giá trị chứa trực tiếp dữ liệu của chúng. Mỗi biến có bản sao dữ liệu riêng. Do đó, một biến kiểu giá trị không thể sửa đổi một đối tượng khác.
Loại giá trị có thể là một trong các loại sau -
- tất cả các kiểu số, ví dụ: int, float, và gấp đôi
- ký tự và bool các loại
- struct gõ hoặc
- liệt kê gõ.
Một kiểu giá trị đơn giản chứa giá trị. Ví dụ:kiểu số nguyên chứa số thực chứ không phải con trỏ tới số, như kiểu tham chiếu.
Để tạo loại giá trị tùy chỉnh, bạn có thể sử dụng cấu trúc. Ví dụ -
public struct Point { public int X; public int Y; } var p1 = new Point();
Trong bộ nhớ, một thể hiện của Điểm được biểu diễn như sau -
Khi bạn gán một biến kiểu giá trị cho một biến khác, thao tác gán sẽ tạo ra một bản sao của giá trị đang được gán. Ví dụ,
Point p2 = p1;
Loại tham chiếu
Các biến của kiểu tham chiếu lưu trữ một tham chiếu đến các đối tượng của chúng. Hai biến khác nhau có thể giữ một tham chiếu đến cùng một đối tượng. Bất kỳ thay đổi nào mà một biến thực hiện đối với đối tượng đều hiển thị với biến thứ hai.
Loại tham chiếu bao gồm các loại sau -
- Chuỗi
- Lớp
- Mảng
- Ủy quyền
- Giao diện
Ví dụ:bạn có thể tạo một lớp, là một kiểu tham chiếu như sau -
public class Point{ public int X; public int Y; } var p1 = new Point();
Khi bạn gán một biến kiểu tham chiếu cho một biến khác, thao tác gán chỉ cần sao chép tham chiếu chứ không phải đối tượng thực.
Point p2 = p1;
Ví dụ
using System; class Program{ static void Main(){ var p1 = new Point { X = 10 }; Point p2 = p1; p2.X = 20; Console.WriteLine("Value Type"); Console.WriteLine(p1.X); Console.WriteLine(p2.X); var u1 = new User { Age = 10 }; User u2 = u1; u2.Age = 20; Console.WriteLine("Reference Type"); Console.WriteLine(u1.Age); Console.WriteLine(u2.Age); } } public struct Point{ public int X; public int Y; } public class User{ public int Age { get; set; } }
Đầu ra
Value Type 10 20 Reference Type 20 20