Hotline: 0919 365 363; Email: daotao@r2s.edu.vn

Tính kế thừa trong C#

Tính kế thừa trong C#

Tính kế thừa trong C#
Kiến thức hữu ích

Tính kế thừa trong C#

Tính kế thừa trong C# là mội khái niệm quan trọng mà người dùng cần phải biết để hỗ trợ cho quá trình lập trình. Vậy đặc điểm của tính kế thừa là gì? Trường hợp nào cần sử dụng? Hãy cùng R2S tìm hiểu ngay nhé!

Tính kế thừa trong C# là gì?

Tính kế thừa trong C# cho phép lập trình viên tạo ra một lớp mới kế thừa một lớp đã tồn tại. Có nghĩa là lớp được kế thừa sẽ có tất cả những thuộc tính và phương thức có quyền truy cập không phải là private của lớp cha. 

Cũng giống như trong Java, C# chỉ hỗ trợ đơn kế thừa (nghĩa là một lớp chỉ được phép kế thừa một lớp khác). 

Ví dụ, khi tạo lớp Nhân viên và lớp Khách hàng, chúng ta có thể kế thừa lớp Người theo hình sau:

Tính kế thừa trong C# là gì?
Tính kế thừa trong C# là gì?

Mục đích sử dụng tính kế thừa trong C#

Tính kế thừa có mục đích để tái sử dụng những thuộc tính và phương thức phổ biến trong một lớp mà không cần phải tạo ra chúng lại. 

Ví dụ khi tạo lớp Nhân viên và Khách hàng, ta có thể kế thừa các thuộc tính và phương thức đã có sẵn ở lớp Người.

Mục đích sử dụng tính kế thừa trong C#
Mục đích sử dụng tính kế thừa trong C#

Chúng ta có thể nhận thấy rằng giữa 2 lớp có 4 thuộc tính (tên, địa chỉ, email, số điện thoại) và 2 phương thức (hiển thị thông tin, nhập thông tin) giống nhau. Vì vậy, ta có thể tạo ra một lớp mới với các thuộc tính và phương thức này.

Mục đích sử dụng

Cài đặt kế thừa như thế nào?

Để kế thừa từ một lớp khác trong C#, ta cần chèn dấu hai chấm sau tên lớp cha (lớp cơ sở) vào phía sau tên lớp được kế thừa. Điều này cho phép lớp dẫn xuất thừa kế các thuộc tính và phương thức không phải là private của lớp cha. 

Sau đây là cú pháp được sử dụng để kế thừa trong C#: 

Tên_Lớp_Con:Tên_Lớp_Cha

Ví dụ: Cho phép lớp NhanVien kế thừa lớp Nguoi
class NhanVien:Nguoi
{
}

Tính kế thừa trong C# – Phương thức khởi tạo

Tại lớp cha (lớp cơ sở) có định nghĩa phương thức khởi tạo (constructor) có tham số thì tại các lớp dẫn xuất (lớp con hay lớp được kế thừa), phải gọi phương thức khởi tạo của lớp cha. 

Tính kế thừa trong C#
Phương thức khởi tạo

Sau đây là một ví dụ:

Xây dựng lớp Nguoi – Tính kế thừa trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication.lesson05
{
 class Nguoi
 {
  // Khai báo thuộc tính
  public string maso;
  public string hoten;
  public string gioitinh;

  // Phương thức khởi tạo có 4 tham số
  public Nguoi(string maso, string hoten, string gioitinh)
  {
    this.maso = maso;
    this.hoten = hoten;
    this.gioitinh = gioitinh;
  } 
 }
}

Xây dựng lớp NhanVien kế thừa lớp Nguoi

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication.lesson05
{
 class NhanVien:Nguoi
 {
   private string bangcap;
   public NhanVien(string maso, string hoten, string gioitinh, string bangcap)
   : base(maso, hoten, gioitinh)
   {
     this.bangcap = bangcap;
   }
 }
}

Tính năng Overriding cho method – Tính kế thừa trong C# là gì?

Là một tính năng cho phép lớp con định nghĩa lại phương thức của lớp cha. Phương thức được khai báo ở lớp con phải cùng tên, cùng tham số mà lớp cha đã khai báo.

Tính năng được miêu tả ở trên được gọi là “Overriding” trong lập trình hướng đối tượng, cho phép lớp con có thể định nghĩa lại phương thức của lớp cha. 

Các phương thức trong lớp con phải có cùng tên và các tham số giống với phương thức được khai báo trong lớp cha.

 Trong C#, để sử dụng tính năng này, cần khai báo phương thức của lớp cha với từ khóa “virtual”, và trong lớp con, để định nghĩa lại xử lý cho phương thức cần sử dụng từ khóa “override”. 

Ví dụ minh họa

Tại lớp cha (lớp Nguoi)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication.lesson05
{
 class Nguoi
 {
  // Khai báo thuộc tính
  public string maso;
  public string hoten;
  public string gioitinh;

  public Nguoi(string maso, string hoten, string gioitinh)
  {
   this.maso = maso;
   this.hoten = hoten;
   this.gioitinh = gioitinh;
  } 

  public virtual void Nhap()
  {
   Console.Write("Nhap ma so: ");
   maso = Console.ReadLine();

   Console.Write("Nhap ho ten: ");
   hoten = Console.ReadLine();

   Console.Write("Nhap gioi tinh: ");
   gioitinh = Console.ReadLine();
  }

  public virtual void HienThi()
  {
   Console.WriteLine("Ma so: {0}, Ho ten: {1}, Gioi tinh: {2}", maso, hoten, gioitinh);
  }
 }
}

Tại lớp con (lớp NhanVien) – Tính kế thừa trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication.lesson05
{
 class NhanVien:Nguoi
 {
  private string bangcap;
  public NhanVien(string maso, string hoten, string gioitinh, string bangcap)
   : base(maso, hoten, gioitinh)
  {
   this.bangcap = bangcap;
  }

  public override void Nhap()
  {
    base.Nhap(); // Gọi phương thức của lớp Nguoi

    // Thêm xử lý cho thuộc tính bằng cấp
    Console.Write("Nhap thong tin bang cap: ");
    bangcap = Console.ReadLine();
  }

  public override void HienThi()
  {
   base.HienThi();
   Console.WriteLine("Bang cap: {0}", bangcap);
  }
 }
}

Từ khoá Sealed là gì?

Một lớp sử dụng từ khoá “sealed” để chỉ định là lớp không cho phép kế thừa. Tương tự, một phương thức sử dụng từ khoá “sealed” để chỉ định là phương thức không cho phép overriding.

Cú pháp khai báo lớp sealed

sealed class Class_Name
{
  //body of the class
}

Cú pháp khai báo phương thức sealed

access_modifier sealed override return_type Method_Name
{
  //body of the method
}

Ví dụ khai báo phương thức sealed – Tính kế thừa trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication.lesson05
{
 class NhanVien:Nguoi
 {
  private string bangcap;

  public NhanVien(string maso, string hoten, string gioitinh, string bangcap)
   : base(maso, hoten, gioitinh)
  {
   this.bangcap = bangcap;
  }

  // Phương thức này không được phép overriding ở lớp con
  public sealed override void Nhap()
  {
   base.Nhap(); // Gọi phương thức của lớp Nguoi

   // Thêm xử lý cho thuộc tính bằng cấp
   Console.Write("Nhap thong tin bang cap: ");
   bangcap = Console.ReadLine();
  }

  public override void HienThi()
  {
   base.HienThi();
   Console.WriteLine("Bang cap: {0}", bangcap);
  }
 }}

Tính kế thừa trong C# – Bài tập thực hành

Xây dựng chương trình quản lý nhân sự trong một công ty với các chức năng sau:

  • Quản lý thông tin nhân viên: mã nhân viên, tên nhân viên, giới tính, bằng cấp, và ngày sinh.
  • Quản lý thông tin khách hàng: mã khách hàng, tên khách hàng, giới tính, ngày sinh, và loại khách hàng.
  • Chương trình cho phép người dùng lựa chọn các thao tác thông qua menu:
    • Thêm nhân viên (nhập: ae): yêu cầu người dùng nhập thông tin nhân viên và mã nhân viên sẽ tự động phát sinh theo qui tắc e1, e2, … Giới tính chỉ được phép nhập “nam” hoặc “nữ”, bằng cấp chỉ được phép nhập “trung cấp”, “cao đẳng” hoặc “đại học”, và ngày sinh phải có độ dài 10.
    • Thêm khách hàng (nhập: ac): yêu cầu người dùng nhập thông tin khách hàng và mã khách hàng sẽ tự động phát sinh theo qui tắc c1, c2, … Giới tính chỉ được phép nhập “nam” hoặc “nữ”, loại khách hàng chỉ được phép nhập “mới”, “thành viên” hoặc “vip”, và ngày sinh phải có độ dài 10.
    • Hiển thị thông tin nhân viên (nhập: dae): hiển thị tất cả các nhân viên đang có trong công ty.
    • Hiển thị thông tin khách hàng (nhập: dac): hiển thị tất cả các khách hàng đang có trong công ty.
    • Thống kê khách hàng (nhập: cs): thống kê số lượng khách hàng theo từng loại khách hàng.
    • Thoát chương trình (nhập: ea): hiển thị thông báo x

Nhiệm vụ cụ thể

Khi người dùng nhập “ae”:

  • Yêu cầu người dùng nhập tên nhân viên, giới tính, ngày sinh và bằng cấp. 
  • Lưu ý rằng mã nhân viên sẽ được tự động phát sinh theo qui tắc là e1, e2, … 
  • Giới tính chỉ được phép nhập “nam” hoặc “nữ”. 
  • Bằng cấp chỉ được phép nhập “trung cấp”, “cao đẳng” hoặc “đại học”. 
  • Ngày sinh phải có độ dài 10.

Khi người dùng nhập “ac”:

  • Chúng tôi yêu cầu tính kế thừa trong C# người dùng cung cấp thông tin sau: tên khách hàng, giới tính, ngày sinh và loại khách hàng. Lưu ý rằng mã khách hàng sẽ tự động phát sinh theo qui tắc “c1, c2, …” và không được thay đổi.
  • Đối với giới tính, chỉ chấp nhận nhập “nam” hoặc “nữ”. 
  • Đối với loại khách hàng, chỉ chấp nhận nhập “mới”, “thành viên” hoặc “vip”.
  • Ngày sinh phải có độ dài là 10 ký tự.

Khi người dùng nhập “dae”, chương trình sẽ hiển thị danh sách toàn bộ nhân viên hiện có trong công ty.

Khi người dùng nhập “dac”, chương trình sẽ hiển thị danh sách toàn bộ khách hàng hiện có trong công ty.

Khi người dùng nhập “cs”, chương trình sẽ thống kê số lượng khách hàng theo loại khách hàng. Nó sẽ hiển thị số lượng khách hàng mới, thành viên và VIP.

Khi người dùng nhập “ea”, chương trình sẽ hiển thị thông báo xác nhận “Bạn có muốn thoát chương trình không (c/k)?”. Nếu người dùng nhập “c”, chương trình sẽ thoát.

Kết luận

Tính kế thừa trong C# là khả năng một lớp con có thể kế thừa các thuộc tính và phương thức từ lớp cha. Nó cho phép tái sử dụng mã nguồn và xây dựng các lớp con dựa trên lớp cha đã tồn tại. Kế thừa trong C# cung cấp tính đa hình và mở rộng cho việc phát triển phần mềm linh hoạt và dễ bảo trì.

Chúc bạn học vui và biết ứng dụng tính năng này vào những trường hợp phù hợp nhất nhé!

Bài viết gốc được đăng tại: giasutinhoc.vn

Alert: You are not allowed to copy content or view source !!