- C# – Anonymous Types
- C# – Dynamic Types
- C# – Ternary Operator ?:
- C# Generics & Generic Constraints
- C# – Delegates
- C# – Func Delegate
- C# – Action Delegate
- C# – Anonymous Method
- C# – Events
- C# – Extension Method
- C# – HttpClient
Dive into C#
- C# – Anonymous Types
Trong C#, anonymous type là loại (lớp) không có bất kỳ tên nào và chỉ có thể chứa public read-only properties. Nó không thể chứa các thành viên khác, chẳng hạn như trường, phương thức, sự kiện, v.v.
Bạn tạo một loại ẩn danh bằng cách sử dụng toán tử mới với cú pháp khởi tạo đối tượng. Biến được gõ ngầm – var được sử dụng để giữ tham chiếu của các loại ẩn danh.
Ví dụ sau đây minh họa việc tạo một biến kiểu ẩn danh sinh viên có chứa ba thuộc tính có tên Id, FirstName và LastName.
Thuộc tính của loại ẩn danh là chỉ đọc và không thể được khởi tạo bằng null, hàm ẩn danh hoặc loại con trỏ. Các thuộc tính có thể được truy cập bằng cách sử dụng ký hiệu dấu chấm (.), giống như các thuộc tính của đối tượng. Tuy nhiên, bạn không thể thay đổi giá trị của thuộc tính vì chúng ở dạng chỉ đọc.
Thuộc tính của loại ẩn danh có thể bao gồm một loại ẩn danh khác.
Bạn cũng có thể tạo một loạt các loại ẩn danh.
Loại ẩn danh sẽ luôn cục bộ đối với phương thức mà nó được xác định. Nó không thể được trả về từ phương thức. Tuy nhiên, một loại ẩn danh có thể được truyền vào phương thức dưới dạng tham số loại đối tượng, nhưng điều đó không được khuyến khích. Nếu bạn cần chuyển nó sang một phương thức khác, thì hãy sử dụng struct hoặc class thay vì kiểu ẩn danh.
Hầu hết, các kiểu ẩn danh được tạo bằng cách sử dụng mệnh đề Select của truy vấn LINQ để trả về một tập hợp con các thuộc tính từ mỗi đối tượng trong bộ sưu tập.
Trong ví dụ trên, mệnh đề select trong truy vấn LINQ chỉ chọn các thuộc tính StudentID và StudentName rồi đổi tên thành Id và Name tương ứng. Vì vậy, nó rất hữu ích trong việc tiết kiệm bộ nhớ và mã không cần thiết. Bộ sưu tập kết quả truy vấn chỉ bao gồm các thuộc tính StudentID và StudentName, như được hiển thị trong dạng xem gỡ lỗi sau.
Visual Studio hỗ trợ IntelliSense cho các loại ẩn danh, như hiển thị bên dưới.
Trong nội bộ, tất cả các kiểu ẩn danh đều có nguồn gốc trực tiếp từ lớp System.Object. Trình biên dịch tạo ra một lớp với một số tên được tạo tự động và áp dụng loại thích hợp cho từng thuộc tính dựa trên biểu thức giá trị. Mặc dù mã của bạn không thể truy cập nó. Sử dụng phương thức GetType() để xem tên.
One Reply to “C# Advanced (Series #1)”