C# 继承和多态性及其程序示例

⚡ 智能摘要

在 C# 中,继承和多态是面向对象编程的两个核心原则。继承允许子类重用父类的字段和方法,而多态则允许同一个方法名有多种不同的形式。

  • 🧬 遗产: 子类继承父类的字段和方法,并且可以添加自己的字段和方法。
  • 🔒 受保护成员: 将父类字段标记为受保护,可以让派生的子类直接重用它们。
  • 🧩 多态: 同一个方法名可以有多种形式,因此同一个调用在不同上下文中表现不同。
  • 🔀 方法重载: 多个方法名称相同,但参数不同,这些参数在编译时解析。
  • 🧱 Code 重复使用: 这两个原则都能减少重复代码,并保持相关类的一致性。
  • 🤖 人工智能辅助: GitHub Copilot 生成基类和派生类;ML.NET 重用类层次结构作为模型输入。

C# 继承和多态

C# 中的继承是什么?

遗产 是 C# 的一个重要概念。继承是一个定义父类和子类的概念。子类继承父类的方法和属性,但同时,它们也可以根据需要修改方法的行为。如果需要,子类还可以定义自己的方法。

让我们通过程序示例更好地理解 C# 继承:

C# 继承示例

现在让我们看看如何在代码中加入继承的概念。

步骤1) 第一步是更改 Tutorial 类的代码。在此步骤中,我们将以下代码添加到 Tutorial.cs 文件中。

C# 继承示例

请注意,我们现在需要向 TutorialID 和 TutorialName 字段添加“protected”访问修饰符。

还记得我们之前提到过这个访问修饰符吗? 访问修饰符教程这里就可以看出设置这个访问修饰符的目的了。只有当设置了访问修饰符(protected)后,子类才能使用父类的字段。

步骤2) 第二步是添加我们的新子类。这个子类的名称将是“Guru99Tutorial”。在此步骤中,我们将以下代码添加到 Tutorial.cs 文件中。该代码应放置在 Tutorial 类定义之后。

C# 继承示例

Code 解释:-

  1. 第一步是创建 Guru99. Tutorial 子类。我们还需要说明,这个类是 Tutorial 类的子类。这是通过冒号 (:) 关键字实现的。
  2. 接下来,我们定义一个名为 RenameTutorial 的方法。它将用于重命名 TutorialName 字段。此方法接受一个包含 Tutorial 新名称的字符串变量。
  3. 然后我们将参数 pNewName 分配给 TutorialName 字段。 注意:尽管我们没有在“Guru在“99Tutorial”类中,我们仍然可以访问此字段。这是因为“Guru“99Tutorial”是Tutorial类的子类。由于我们将Tutorial类的字段设置为受保护的,因此该子类可以访问这些字段。

步骤3) 最后一步是修改我们的主程序 Program.cs 文件。在我们的控制台应用程序中,我们将创建一个对象。 Guru99Tutorial 类。我们将使用此对象调用 RenameTutorial 方法。然后,我们将借助 GetTutorial 方法显示 TutorialName 字段。

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(); 
  }
 }
}

Code 解释:-

  1. 第一步是为……创建一个对象 Guru99Tutorial 类。这是通过 'new' 关键字完成的。请注意,这次我们并没有创建 Tutorial 类的对象。
  2. 我们使用 RenameTutorial 方法 Guru99Tutorial 类用于更改 TutorialName 字段。我们传递字符串“.Net by”。 Guru99”到 RenameTutorial 方法。
  3. 然后我们调用 GetTutorial 方法。请注意,即使此方法未在……中定义, Guru在 99Tutorial 类中,我们仍然可以访问这个方法。GetTutorial 方法的输出随后会通过 Console.WriteLine 方法显示在控制台上。

如果上述代码输入正确,并且程序成功执行,则会显示以下输出。

输出:

C# 继承示例

从输出结果中我们可以清楚地看到,TutorialName 字段被重命名为“.Net by”。 Guru99”。这是通过子类调用的 RenameTutorial 方法实现的。

C# 中的多态性是什么?

多态性 in C# 多态性是面向对象编程(OOP)中的一个概念,它指的是一个名称可以有多种形式。例如,你用智能手机进行通讯。你选择的通讯方式可以是任何一种,比如打电话、发短信、发彩信、发邮件等等。虽然目标是相同的,即通讯,但它们实现通讯的方式却不同。这就是多态性。

通过以下程序示例,您将更好地理解 C# 多态性:

C# 多态性示例

现在让我们看看如何在我们的代码中加入多态的概念。

步骤1) 第一步是更改 Tutorial 类的代码。在此步骤中,我们将以下代码添加到 Tutorial.cs 文件中。

C# 多态性示例

Code 解释:-

1 & 2) 第一步与我们之前的例子相同。我们保持ping SetTutorial 方法的定义如下。

3)该方法根据参数pID和pName设置TutorialID和TutorialName。

4) 在这里,我们对类进行了更改,添加了一个新方法,其名称与 SetTutorial 相同。只是这次我们只传递一个参数,即 pName。在此方法中,我们只是将 TutorialName 字段设置为 pName。

步骤2) 最后一步是修改我们的主程序 Program.cs 文件。在我们的控制台应用程序中,我们将创建一个对象。 Guru99辅导课。

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(); 
  }
 }
}

Code 解释:-

  1. 在第一步中,我们使用带有 2 个参数的 SetTutorial 方法。我们将 TutorialID 和 TutorialName 传递给此方法。
  2. 在第二步中,我们现在只使用一个参数调用 SetTutorial 方法。我们只是将 TutorialName 传递给此方法。

如果正确输入了上述代码并运行程序,将显示以下输出。如果您还想获取教程 ID 以及教程名称,则应按照以下步骤操作

  1. 创建一个名为 public int GetTutorialID 的单独方法
  2. 在该方法中写入代码行“return TutorialID”。这可用于将 TutorialID 返回给调用程序。

输出:

C# 多态性示例

从输出中,我们可以清楚地看到两个方法都被成功调用。因此,字符串“First Tutorial”和“Second Tutorial”被发送到控制台。

常见问题

C# 通过类支持单级、多级和层次继承。多重继承只能通过接口实现。

不。AC# 类只继承自一个基类。多重继承则使用多个接口。

方法重载在编译时使用同一个名称和不同的参数。重写则在运行时重新定义一个虚基方法。

virtual 关键字使基类方法可被重写;override 关键字在派生类中重新定义该方法。

base 关键字允许派生类调用父类构造函数或访问隐藏的或重写的基类成员。

将类标记为密封类。密封类不能是基类,这样可以防止进一步继承并提高性能。

是的。GitHub Copilot 会根据注释或类名生成基类和子类,并添加虚方法和重写方法。

ML.NET 定义了继承共享成员的数据类和预测类,并且其管道重用了通用转换器基类型。

总结一下这篇文章: