Similar to Java, C# also embraces inheritance. For an in-depth understanding of inheritance in C#, dive into this article by Mytour below.
Exploring Inheritance in C#
1. Tính kế thừa (Inheritance) trong C#.
1.1. Một số thuật ngữ quan trọng.
2. Sử dụng tính kế thừa trong C#.
3. Các loại tính kế thừa trong C#.
3.1. Kế thừa một cấp (Single Inheritance).
3.2. Kế thừa nhiều cấp (Multilevel Inheritance).
3.3. Kế thừa phân cấp (Hierarchical Inheritance).
3.4. Đa kế thừa trong C# (Multiple Inheritance).
3.5. Hybrid Inheritance.
4. Một số lưu ý về tính kế thừa trong C#.
1. Tính kế thừa (Inheritance) trong C#
Tính kế thừa (Inheritance) là yếu tố quan trọng trong lập trình hướng đối tượng (Object Oriented Programming). Nó là một cơ chế trong C#, theo đó một lớp được phép kế thừa các tính năng (trường và phương thức) của lớp khác.
1.1. Một số thuật ngữ quan trọng:
- Super Class: Lớp có các tính năng được kế thừa được gọi là Super Class (hay lớp cơ sở hoặc lớp cha).
- Lớp con (Sub Class): Lớp kế thừa lớp khác được gọi là lớp con (hay còn gọi là lớp dẫn xuất, lớp mở rộng). Lớp con có thể thêm các trường và phương thức riêng, ngoài trường và phương thức của lớp cha.
2. Sử dụng tính kế thừa trong C#
Biểu tượng của tính kế thừa trong C# là dấu hai chấm (:).
Cú pháp:
Ví dụ:
Trong ví dụ về tính kế thừa trong C# dưới đây, lớp GFG là lớp cơ sở, lớp GeekforGeek là lớp dẫn xuất, mở rộng lớp GFG và lớp Sudo là lớp điều khiển để chạy chương trình.
Kết quả đầu ra có dạng:
3. Các loại tính kế thừa trong C#
Dưới đây là danh sách các loại kế thừa khác nhau trong C#:
3.1. Kế thừa một cấp (Single Inheritance)
Trong kế thừa một cấp, các lớp con kế thừa các tính năng của lớp cha. Trong hình minh họa dưới đây, lớp A đóng vai trò là lớp cơ sở cho lớp dẫn xuất B.
3.2. Kế thừa nhiều cấp (Multilevel Inheritance)
Trong kế thừa nhiều cấp, lớp dẫn xuất sẽ được kế thừa một lớp cơ sở, và lớp dẫn xuất này cũng đóng vai trò là lớp cơ sở cho lớp khác. Trong hình minh họa dưới đây, lớp A đóng vai trò là lớp cơ sở cho lớp dẫn xuất B, lớp B đóng vai trò là lớp cơ sở cho lớp dẫn xuất C.
3.3. Kế thừa phân cấp (Hierarchical Inheritance)
Trong kế thừa phân cấp, một lớp đóng vai trò là lớp cha (super class hay lớp cơ sở) cho nhiều lớp con khác. Trong hình dưới đây, lớp A đóng vai trò là lớp cơ sở cho lớp dẫn xuất B, C và D.
3.4. Đa kế thừa trong C# (Multiple Inheritance)
Trong đa kế thừa, một lớp có thể có nhiều hơn một lớp cha và kế thừa từ tất cả các lớp cha. Một lưu ý nhỏ là C# không hỗ trợ đa kế thừa đối với các lớp. Trong C#, chúng ta có thể thực hiện đa kế thừa thông qua giao diện (interface). Trong hình minh họa dưới đây, lớp C có nguồn gốc từ giao diện A và B.
3.5. Hybrid Inheritance
Hybrid Inheritance là sự kết hợp của 2 hoặc nhiều loại kế thừa trên. Vì C# không hỗ trợ đa kế thừa với các lớp, nên hybrid inheritance cũng không hỗ trợ triển khai với các lớp. Trong C#, chúng ta có thể thực hiện Hybrid Inheritance thông qua giao diện.
4. Một số lưu ý về tính kế thừa trong C#
- Lớp cha mặc định: Ngoài trừ lớp Object không có lớp cha, mỗi lớp chỉ có một lớp cha trực tiếp (kế thừa một cấp). Trong trường hợp không có lớp cha rõ ràng, mỗi lớp là một lớp con của lớp Object.
- Lớp cha chỉ có một: Một lớp cha có thể có nhiều lớp con, nhưng một lớp con chỉ có thể có một lớp cha. Điều này là bởi vì C# không hỗ trợ đa kế thừa với các lớp. Mặc dù đa kế thừa hỗ trợ C# thông qua giao diện.
- Kế thừa Constructors trong C#: Một lớp con kế thừa tất cả các thành viên (trường, phương thức) từ lớp cha của nó. Các Constructor không phải là thành viên, vì vậy nó không được kế thừa bởi các lớp con, nhưng Constructor của lớp cha có thể được gọi từ lớp con.
- Kế thừa thành viên riêng: Một lớp con không kế thừa các thành viên riêng của lớp cha. Tuy nhiên nếu lớp cha có các thuộc tính (phương thức get và set) để truy cập các trường riêng của nó thì một lớp con có thể kế thừa.
Bài viết trên đây Mytour vừa giới thiệu cho bạn về tính kế thừa (Inheritance) trong C#. Hy vọng bài viết trên đây sẽ cung cấp cho bạn các thông tin, kiến thức bổ ích mới về C# nhé. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác đã có trên Mytour để tìm hiểu rõ hơn về mảng trong C# cũng như chuỗi trong C# nhé.
