21 Kiểu vô danh (Anonymous Type) và dynamic

Trong lập trình C#, kiểu vô danh (Anonymous Type)kiểu động (dynamic) là hai tính năng quan trọng, giúp tăng cường tính linh hoạt và hiệu quả trong việc xử lý dữ liệu.

1. Kiểu Vô Danh (Anonymous Type)

Kiểu vô danh cho phép tạo ra các đối tượng không có định nghĩa lớp rõ ràng, thường được sử dụng để lưu trữ một tập hợp các giá trị chỉ đọc.

Cách tạo kiểu vô danh:

Sử dụng từ khóa new cùng với danh sách các thuộc tính và giá trị tương ứng:

var obj = new {
    thuoctinh1 = giatri1,
    thuoctinh2 = giatri2
}

Ví dụ:

var person = new { Name = "John", Age = 30 };

Trong ví dụ này, person là một đối tượng kiểu vô danh với hai thuộc tính NameAge.

Lưu ý:

  • Các thuộc tính trong kiểu vô danh là chỉ đọc; không thể thay đổi giá trị sau khi khởi tạo.
  • Kiểu vô danh thường được sử dụng trong các truy vấn LINQ để lưu trữ kết quả tạm thời.

Ví dụ sử dụng trong LINQ:

var students = new[]
{
    new { Name = "Alice", Age = 20 },
    new { Name = "Bob", Age = 22 },
    new { Name = "Charlie", Age = 23 }
};

var adultStudents = from student in students
                    where student.Age >= 21
                    select student;

foreach (var student in adultStudents)
{
    Console.WriteLine($"{student.Name} is {student.Age} years old.");
}

Trong đoạn mã trên, students là một mảng các đối tượng kiểu vô danh, và chúng ta sử dụng LINQ để lọc ra những sinh viên từ 21 tuổi trở lên.

2. Kiểu Động (dynamic)

Kiểu động cho phép trì hoãn việc kiểm tra kiểu dữ liệu đến thời điểm chạy (runtime), thay vì thời điểm biên dịch (compile-time). Điều này mang lại sự linh hoạt khi làm việc với các đối tượng mà kiểu không được biết trước hoặc có thể thay đổi.

Khai báo biến kiểu động:

Sử dụng từ khóa dynamic:

dynamic variable = "Hello, World!";
Console.WriteLine(variable); // Output: Hello, World!

variable = 42;
Console.WriteLine(variable); // Output: 42

Trong ví dụ này, variable ban đầu là một chuỗi, sau đó được gán thành số nguyên mà không gặp lỗi biên dịch.

Lưu ý:

  • Với biến kiểu dynamic, trình biên dịch bỏ qua việc kiểm tra kiểu tại thời điểm biên dịch, do đó, các lỗi liên quan đến kiểu dữ liệu chỉ được phát hiện khi chạy chương trình.
  • Sử dụng dynamic cần cẩn trọng để tránh lỗi runtime, đặc biệt khi gọi các phương thức hoặc thuộc tính không tồn tại trên đối tượng.

Ví dụ về lỗi runtime:

dynamic obj = 10;
Console.WriteLine(obj.ToUpper()); // Lỗi runtime: 'int' không có phương thức 'ToUpper'

Trong trường hợp này, chương trình sẽ ném ngoại lệ tại thời điểm chạy vì kiểu int không có phương thức ToUpper.

So sánh dynamicvar:

  • var yêu cầu trình biên dịch xác định kiểu tại thời điểm biên dịch, dựa trên giá trị được gán.
  • dynamic trì hoãn việc xác định kiểu đến thời điểm chạy, cho phép thay đổi kiểu dữ liệu trong suốt vòng đời của biến.

Ví dụ so sánh:

var x = 10; // 'x' được xác định là 'int' tại thời điểm biên dịch
// x = "Hello"; // Lỗi biên dịch: không thể gán 'string' cho 'int'

dynamic y = 10; // 'y' được xác định là 'dynamic'
y = "Hello"; // Hợp lệ tại thời điểm chạy

Việc hiểu rõ và sử dụng đúng kiểu vô danhkiểu động trong C# sẽ giúp lập trình viên viết mã linh hoạt và hiệu quả hơn, đặc biệt trong các tình huống yêu cầu xử lý dữ liệu không xác định trước hoặc tương tác với các hệ thống động.

Để lại một bình luận 0

Your email address will not be published. Required fields are marked *