Những khái niệm căn bản về Generic trong C#

    Nếu bạn đã từng Lập trình C++ thì chắc hẳn đã từng biết tới khái niệm Template (thường được gọi là mẫu hàm) Template được dùng để tạo các hàm các class mẫu mà không cần quan tâm đến đối số là kiểu dữ liệu gì, template được đưa ra với mục đích tăng tính năng sử dụng lại của mã nguồn. Đến với C# bạn sẽ làm quen với khái niệm Generic với những tính năng tương tự Template trong C++.

1. KHÁI NIỆM GENERIC

    Generic được đưa vào C# từ version 2.0 và common language runtime (CLR). Generic mang đến .NET framework khái niệm mới về kiểu tham số, các lớp cũng như các hàm khi định nghĩa sẽ không cần chỉ rõ tham số đưa vào thuộc kiểu dữ liệu gì, tất cả đều được xử lý dưới dạng chung nhất, từ đó người dùng có thể phát triển thành từng lớp, hàm với đối số là một kiểu dữ liệu thực nhất định. Như vậy ta thấy rằng tính kế thừa trong lập trình được áp dụng mạnh mẽ tại đây, giúp bạn tiết kiệm rất nhiều chi phí trong việc xây dựng chương trình; Ví dụ bạn xây dựng 1 hàm quick sort cho 1 mảng mà không cần quan tâm giá trị của từng phần tử trong mảng là kiểu gì, sau đó khi sử dụng bạn mới khai báo kiểu cho các phần tử đó. Như vậy bạn có thể sử dụng hàm quick-sort đó cho mảng số nguyên, mảng số thực và cả mảng ký tự …

    Đến đây có thể bạn vẫn chưa hình dung ra được Generic là như thế nào, chúng ta hãy bắt đầu với một ví dụ đơn giản trước để bước đầu hình dung về Generic và những lợi ích mang lại từ nó:

001-generic-microsofttech-1.net

    Ví dụ trên ta thấy rằng class GenericList được tạo ra với kiểu dự liệu T chung, đến khi sử dụng mới chính thức chỉ rõ T là kiểu dữ liệu gì. Như trong ví dụ list1, T được tương ứng với kiểu int; list2 T là kiểu string và list3 T là một lớp nào đó.

2. SƠ LƯỢC MỘT SỐ ĐẶC ĐIỂM CỦA GENERIC:

  • Generic định nghĩa một thao tác dữ liệu với kiểu dữ liệu chung nhất nhằm tối đa hóa việc sử dụng lại code trong chương trình, tạo ra các kiểu dữ liệu an toàn, đem lại hiệu suất cao nhất.
  • Ứng dụng phổ biến nhất của Generic là tạo ra các collection class (tạm dịch: lớp dữ liệu tập hợp).
  • Trong .NET framework có chứa sẵn các collection framework trong namespace System.Collections.Generic.
  • Với Generic bạn có thể tạo được các interface, class, method, event và delegates.
  • Generic có thể được hạn chế để cho phép truy cập tới các phương thức (method) trên các loại dữ liệu đặc biệt.

002-generic-microsofttech.net

    Trong ví dụ bên trên, ta định nghĩa 1 class Genericlist cho danh sách liên kết với kiểu dữ liệu mỗi Node là T. Bên trong ta tạo các Node với kiểu T, đồng thời tạo các con trỏ Next để liên kết danh sách, trường Data để lưu dữ liệu, có phương thức khởi tạo danh sách rỗng, thêm phần tử mới vào danh sách. Trong hàm main ta khởi tạo danh sách liên kết với kiểu dữ liệu mỗi Node là int và cho vòng for(0->9) để add giá trị cho danh sách liên kết, và cuối cùng dùng foreach để tìm tất cả các phần tử của danh sách và in ra Console.

003-generic-microsofttech.net

3. KẾT LUẬN

    Xem ví dụ ta thấy trong định nghĩa class Genericlist đều làm việc kiểu dữ liệu trừu tượng T , và có thể thay thế bất kỳ kiểu dữ liệu nào. Để làm được điều này trong quá trình định nghĩa ta phải đảm bảo các thuộc tính, phương thức hoạt động đúng trên nhiều kiểu dữ liệu khác nhau, giảm thiểu trường hợp phát sinh lỗi… Nếu nghiên cứu kỹ và làm việc nhiều với Generic sau một thời gian đảm bảo khả năng viết Code tổng quát, khả năng tư duy trừu tượng của các bạn sẽ tăng thêm rất nhiều.

Nguồn http://microsofttech.net

Leave a comment