Kế thừa và đa hình trong C# với các ví dụ về chương trình

Kế thừa trong C# là gì?

di sản là một khái niệm quan trọng của C#. Kế thừa là một khái niệm trong đó bạn xác định lớp cha và lớp con. Các lớp con kế thừa các phương thức và thuộc tính của lớp cha, nhưng đồng thời, chúng cũng có thể sửa đổi hành vi của các phương thức nếu cần. Lớp con cũng có thể định nghĩa các phương thức của riêng nó nếu được yêu cầu.

Chúng ta hãy hiểu rõ hơn về Kế thừa C# bằng một ví dụ về chương trình:

Ví dụ về kế thừa C#

Bây giờ hãy xem cách chúng ta có thể kết hợp khái niệm kế thừa trong mã của mình.

Bước 1) Bước đầu tiên là thay đổi mã cho lớp Hướng dẫn của chúng ta. Trong bước này, chúng tôi thêm mã bên dưới vào tệp Tutorial.cs.

Ví dụ về kế thừa C#

Lưu ý rằng bây giờ chúng ta cần thêm công cụ sửa đổi truy cập 'được bảo vệ' vào cả trường TutorialID và TutorialName.

Hãy nhớ rằng chúng tôi đã đề cập đến công cụ sửa đổi quyền truy cập này trong hướng dẫn Công cụ sửa đổi quyền truy cập. Vâng, ở đây bạn có thể thấy mục đích của việc này. Chỉ khi bạn có công cụ sửa đổi truy cập này (được bảo vệ), lớp con mới có thể sử dụng các trường của lớp cha.

Bước 2) Bước thứ hai là thêm lớp con mới của chúng ta. Tên của lớp này sẽ là “Guru99Tutorial”. Trong bước này, chúng tôi thêm mã bên dưới vào tệp Tutorial.cs. Mã nên được đặt sau định nghĩa lớp Hướng dẫn.

Ví dụ về kế thừa C#

Giải thích mã: -

  1. Bước đầu tiên là tạo lớp con Guru99Tutorial. Chúng ta cũng cần đề cập rằng lớp này sẽ là lớp con của lớp Hướng dẫn. Việc này được thực hiện bằng từ khóa ':'.
  2. Tiếp theo, chúng ta định nghĩa một phương thức có tên RenameTutorial. Nó sẽ được sử dụng để đổi tên trường TutorialName. Phương thức này chấp nhận một biến chuỗi chứa tên mới của Hướng dẫn.
  3. Sau đó chúng tôi đã gán tham số pNewName cho trường TutorialName.
    Chú thích: – Mặc dù chúng tôi chưa xác định trường TutorialName trong lớp “Guru99Tutorial”, chúng tôi vẫn có thể truy cập trường này. Điều này là do thực tế “Guru99Tutorial” là lớp con của lớp Hướng dẫn. Và bởi vì chúng tôi đã đặt các trường của lớp Hướng dẫn ở trạng thái được bảo vệ nên lớp này có thể truy cập chúng.

Bước 3) Bước cuối cùng là sửa đổi tệp Program.cs chính của chúng tôi. Trong ứng dụng bảng điều khiển, chúng ta sẽ tạo một đối tượng của lớp Guru99Tutorial. Với đối tượng này, chúng ta sẽ gọi phương thức RenameTutorial. Sau đó chúng ta sẽ hiển thị trường TutorialName với sự trợ giúp của phương thức GetTutorial.

Ví dụ về kế thừa C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 public class Tutorial
 {
  protected int TutorialID; 
  protected string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  
  public String GetTutorial()
  {
   return TutorialName;
  }
 }
  public class Guru99Tutorial:Tutorial
  {
   public void RenameTutorial(String pNewName)
   {
    TutorialName=pNewName;
   }
  
  static void Main(string[] args) 
  {
   Guru99Tutorial pTutor=new Guru99Tutorial();
   
   pTutor.RenameTutorial(".Net by Guru99");
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Giải thích mã: -

  1. Bước đầu tiên là tạo một đối tượng cho lớp Guru99Tutorial. Điều này được thực hiện thông qua từ khóa 'mới'. Lưu ý rằng lần này chúng ta không tạo đối tượng của lớp Tutorial.
  2. Chúng tôi sử dụng phương thức RenameTutorial của lớp Guru99Tutorial để thay đổi trường TutorialName. Chúng ta chuyển chuỗi “.Net by Guru99” vào phương thức RenameTutorial.
  3. Sau đó chúng tôi gọi phương thức GetTutorial. Lưu ý rằng mặc dù phương thức này không được xác định trong lớp Guru99Tutorial nhưng chúng ta vẫn có thể truy cập phương thức này. Sau đó, đầu ra của phương thức GetTutorial được hiển thị trên bảng điều khiển thông qua phương thức Console.WriteLine.

Nếu mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sau sẽ được hiển thị.

Đầu ra:

Ví dụ về kế thừa C#

Từ kết quả đầu ra, chúng ta có thể thấy rõ trường TutorialName đã được đổi tên thành “.Net bởi Guru99”. Điều này được thực hiện nhờ phương thức RenameTutorial được lớp con gọi.

Đa hình trong C# là gì?

Tính đa hình trong C# là một khái niệm OOPs trong đó một tên có thể có nhiều dạng. Ví dụ, bạn có một chiếc điện thoại thông minh để giao tiếp. Chế độ giao tiếp bạn chọn có thể là bất kỳ thứ gì. Có thể là cuộc gọi, tin nhắn văn bản, tin nhắn hình ảnh, thư, v.v. Vì vậy, mục tiêu là chung, tức là giao tiếp, nhưng cách tiếp cận của chúng lại khác nhau. Điều này được gọi là Đa hình.

Bạn sẽ hiểu rõ hơn về Đa hình C# bằng Ví dụ về chương trình bên dưới:

Ví dụ về đa hình trong C#

Bây giờ chúng ta hãy xem làm thế nào chúng ta có thể kết hợp khái niệm Đa hình trong mã của mình.

Bước 1) Bước đầu tiên là thay đổi mã cho lớp Hướng dẫn của chúng ta. Trong bước này, chúng tôi thêm mã bên dưới vào tệp Tutorial.cs.

Ví dụ về đa hình trong C#

Giải thích mã: -

1 & 2) Bước đầu tiên giống như trong các ví dụ trước của chúng tôi. Chúng tôi vẫn giữ nguyên định nghĩa của phương thức SetTutorial.

3) Phương thức này đặt TutorialID và TutorialName dựa trên các tham số pID và pName.

4) Đây là nơi chúng ta thực hiện thay đổi đối với lớp của mình, trong đó chúng ta thêm một phương thức mới có cùng tên là SetTutorial. Chỉ lần này chúng ta chỉ truyền một tham số là pName. Trong phương pháp này, chúng tôi chỉ đặt trường TutorialName thành pName.

Bước 2) Bước cuối cùng là sửa đổi tệp Program.cs chính của chúng tôi. Trong ứng dụng bảng điều khiển, chúng ta sẽ tạo một đối tượng của lớp Guru99Tutorial.

Ví dụ về đa hình trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public void SetTutorial(string pName) 
  {
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
   
   pTutor.SetTutorial(1,"First Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
   
   pTutor.SetTutorial("Second Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Giải thích mã: -

  1. Ở bước đầu tiên, chúng ta sử dụng phương thức SetTutorial với 2 tham số. Nơi chúng tôi chuyển cả TutorialID và TutorialName cho phương thức này.
  2. Ở bước thứ hai, chúng ta hiện đang gọi phương thức SetTutorial chỉ với một tham số. Chúng tôi chỉ chuyển TutorialName cho phương thức này.

Nếu mã trên được nhập đúng và chương trình được chạy, đầu ra sau sẽ được hiển thị. Trong trường hợp bạn muốn lấy cả ID hướng dẫn cùng với Tên hướng dẫn, bạn nên làm theo các bước dưới đây

  1. Tạo một phương thức riêng gọi là public int GetTutorialID
  2. Trong phương thức đó, hãy viết dòng mã “return TutorialID.” Điều này có thể được sử dụng để trả lại TutorialID cho chương trình gọi.

Đầu ra:

Ví dụ về đa hình trong C#

Từ kết quả đầu ra, chúng ta có thể thấy rõ rằng cả hai phương thức đều được gọi thành công. Do đó, các chuỗi “Hướng dẫn đầu tiên” và “Hướng dẫn thứ hai” đã được gửi tới bảng điều khiển.

Tổng kết

  • Kế thừa là nơi lớp con kế thừa các trường và phương thức của lớp cha. Lớp con sau đó cũng có thể định nghĩa các phương thức riêng của nó.
  • Đa hình trong C# là một khái niệm OOP trong đó một tên có thể có nhiều dạng.