Generic trong C#
Khóa học lập trình C# nâng cao

Danh sách bài học
Generic trong C#
Nội dung bài viết Học nhanh
Dẫn nhập
Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về BITARRAY TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về Generic trong C#.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
- BIẾN , KIỂU DỮ LIỆU, TOÁN TỬ trong C#
- CÂU ĐIỀU KIỆN trong C#
- Cấu trúc cơ bản của VÒNG LẶP, HÀM trong C#
- MẢNG trong C#
- LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG C#
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
- Generic là gì?
- Một số loại Generic Collections thông dụng.
Generic là gì?
Nếu bạn đã từng học LẬP TRÌNH C++ thì chắc hẳn bạn đã từng biết tới khái niệm Template (hay còn gọi là mẫu).
Template được dùng để tạo ra các lớp, các hàm mà không cần quan tâm đến đối số kiểu dữ liệu là gì. Template được đưa ra với mục đích tăng tính tái sử dụng lại mã nguồn.
Tượng tự Template của C++, Generic trong C# cho phép bạn định nghĩa một hàm, một lớp mà không cần chỉ ra đối số kiểu dữ liệu là gì. Tuỳ vào kiểu dữ liệu mà người dùng truyền vào thì nó sẽ hoạt động theo kiểu dữ liệu đó.
Ví dụ: bạn muốn hàm hoán đổi giá trị 2 số nguyên ta sẽ viết như sau:
Mọi thứ đều hoạt động tốt cho đến khi bạn hoán đổi 2 số thực. Khi đó bạn phải viết lại 1 hàm Swap mới với kiểu dữ liệu của tham số truyền vào là kiểu số thực.
Mặc dù thao tác giống nhau nhưng ta phải viết hàm này 2 lần. Chính vì vậy mà Generic ra đời để giúp chúng ta giảm thiểu việc code và tăng tính tái sử dụng.
Nếu sử dụng Generic ta sẽ viết như sau:
Bạn chỉ cần đặt 1 chữ cái nào đó thay cho kiểu dữ liệu và khi gọi hàm bạn chỉ ra kiểu dữ liệu bạn đang thao tác là gì. Ví dụ:
Khi bạn gọi cú pháp bên dưới thì hàm Swap sẽ chạy và thay ký tự T thành kiểu dữ liệu int tương ứng.
Phía trên mình vừa giới thiệu về Generic cho phương thức. Tiếp theo là Generic cho lớp cũng tương tự.
Ví dụ:
Bạn cứ tưởng tượng bình thường bạn viết một lớp cho kiểu int, long, double gì đó thì giờ thay nó bằng T còn lại thao tác như bình thường.
Đến khi sử dụng thì ta truyền kiểu dữ liệu thích hợp vào. Ví dụ:
Khi bạn khai báo cú pháp bên dưới thì trình biên dịch sẽ hiểu T trong lớp MyGeneric là kiểu int và thay thế toàn bộ chữ cái T trong lớp thành int sau đó thực thi.
Đặc điểm của Generic
Giúp định nghĩa một thao tác dữ liệu với kiểu dữ liệu chung nhất nhìn hạn chế viết code và tái sử dụng.
Ứng dụng phổ biến nhất của Generic là tạo ra các Generic Collections.
- Ở những bài học trước ta đã tìm hiểu các Collections phổ biến thì nếu các bạn để ý giá trị lưu trữ bên trong đều là object.
- Điều này gây rất nhiều khó khăn nếu như ta muốn quản lý 1 danh sách có cùng kiểu. Vì object có thể chứa được mọi kiểu dữ liệu nên ta khó kiểm soát rằng việc thêm phần tử có phải cùng kiểu dữ liệu ta mong muốn hay không.
- Từ đó Generic Collections ra đời để giúp ta vừa có thể sử dụng được các Collections vừa có thể hạn chế lỗi xảy ra trong quá trình thực thi.
Ngoài ra, Generic còn giúp hạn chế truy cập nếu như không truyền đúng kiểu dữ liệu. Điều này sẽ được trình bày trong những bài học sau.
Trong series này mình sẽ không đào sâu về cách viết Generic mà thay vào đó sẽ giới thiệu cho các bạn một số Generic Collections phổ biến cũng như cách sử dụng chúng.
Một số loại Generic Collections thông dụng
Các Generic Collections đều được xây dựng bắt nguồn từ 1 Collections nào đó có sẵn. Vì thế với mỗi Collections đã học sẽ có một Generic tương ứng.
Một số Generic Collections được sử dụng phổ biến:
LỚP |
MÔ TẢ |
List<T> |
Là một Collections giúp lưu trữ các phần tử liên tiếp (giống mảng) |
Dictionary<Tkey, TValue> |
Lớp lưu trữ dữ liệu dưới dạng cặp Key – Value. |
SortedDictionary<Tkey, TValue> |
Là sự kêt hợp của List và Dictionary. Tức là dữ liệu sẽ lưu dưới dạng Key – Value. |
Stack<T> |
Lớp cho phép lưu trữ và thao tác dữ liệu theo cấu trúc LIFO (Last In First Out). |
Queue<T> |
Lớp cho phép lưu trữ và thao tác dữ liệu theo cấu trúc FIFO (First In First Out). |
Kết luận
Nội dung bài này giúp các bạn nắm được:
- Generic là gì?
- Một số loại Generic Collections thông dụng.
Bài học sau chúng ta sẽ cùng tìm hiểu về LIST TRONG C#.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Generic trong C# dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Tác giả/Dịch giả
Khóa học
Khóa học lập trình C# nâng cao
Bạn đã học hết các khoá học về C# CƠ BẢN, LẬP TRÌNH WINFORM thậm chí là LẬP TRÌNH WPF nhưng vẫn bối rối trước những hướng dẫn về CÁC PROJECT THỰC TẾ của Kteam?
Hoặc bạn nghe nói mãi về .NET nhưng vẫn thắc mắc nó có gì hay ho bên trong đó?
Hay đơn giản bạn viết muốn 1 đoạn code cực kỳ nguy hiểm khiến người khác khi nhìn vào phải thốt lên: “Ồ!!!......... Trẻ trâu…”
Khoá học lần này sẽ giúp bạn giải đáp những thắc mắc trên. Chào mừng các bạn đã đến với khoá học Lập trình C# nâng cao của Kteam.
bạn có thể update lại link tài liệu không nó bị lỗi rồi !. cảm ơn b!