C#继承和多态 项目实例(C# Inheritance and Polymorphism with Program Examples)
什么是继承?
继承是C#中很重要的概念。继承是一个定义父类和子类的概念。子类继承父类的方法和属性,但是同时,根据需要他们也会修改方法函数的行为。子类也可以定义自己的方法函数。
现在,让我们看一下如何将继承的概念运用在代码中。
第一步:更改Tutorial类的代码,如下
注意:我们现在在TutorialID和TutorialName字段中增加了访问修饰符“protected”
记住我们在tutorial类中提到的访问修饰符,你会看到这么做的目的。只有设置了访问修饰符protected,子类才能够使用父类的字段。
第二步:第二步是添加新的子类。这个类的名称是“Guru99Tutorial”,在这一步中,我们添加了如下代码到Tutorial.cs文件中。
代码解释:
1、第一步是创建Guru99Tutorial子类,这个类是Tutorial的子类,子类 和基类之间用:标注。
2、接下来,我们定义了一个叫RenameTutorial的函数。此函数用于重命名TutorialName字段。此函数接受string变量,string变量包含Tutorial类的新名字。
3、将参数pNewName赋值给TutorialName字段。
注:尽管我们在Guru99Tutorial类中没有定义TutorialName字段,但是在子类中仍然可以访问这个字段。这是因为Guru99Tutorial是Tutorial的子类,也是因为我们将Tutorial类的字段设置为protected,这样字段就可以被子类访问。
第三步:最后一步是修改main program主程序。我们定义一个Guru99Tutorial类的实例对象,用这个实例对象,可以调用RenameTutorial方法函数。然后在GetTutorial函数的帮助下,可以显示TutorialName字段。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 namespace DemoApplication 7 { 8 public class Tutorial 9 { 10 protected int TutorialID; 11 protected string TutorialName; 12 13 public void SetTutorial(int pID,string pName) 14 { 15 TutorialID=pID; 16 TutorialName=pName; 17 } 18 19 public String GetTutorial() 20 { 21 return TutorialName; 22 } 23 } 24 public class Guru99Tutorial:Tutorial 25 { 26 public void RenameTutorial(String pNewName) 27 { 28 TutorialName=pNewName; 29 } 30 31 static void Main(string[] args) 32 { 33 Guru99Tutorial pTutor=new Guru99Tutorial(); 34 35 pTutor.RenameTutorial(".Net by Guru99"); 36 37 Console.WriteLine(pTutor.GetTutorial()); 38 39 Console.ReadKey(); 40 } 41 } 42 }
输出结果
什么是多态?
C#中的多态性是一个OOPs概念,一个名称可以有多种形式。
比如,你有一个智能手机用于沟通。你可以选择任何沟通形式,可能是打电话,发短信,发图片,邮件等等。所以说,目的是沟通,但是方式是不相同的,这就叫做多态。
通过下面这个项目例子,就会更好地理解多态的概念
现在我们看一下,在下面的代码中如何整合多态的概念。
第一步:
修改Tutorial类的代码,在这一步中,添加代码如下
代码解读:
1)第一步和前面的项目实例是一样的,依旧定义了SetTutorial函数;
3)函数基于pID 和 pName参数设置了TutorialID 和 the TutorialName;
4)这次我们对类做了修改,添加了一个名称相同的新函数SetTutorial()。这一次我们设置了一个参数pName。在这个函数中,我们将pName赋值给了TutorialName字段。
第二步:
最后一步还是修改主程序,产生一个Guru99Tutorial类的实例对象。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 namespace DemoApplication 7 { 8 class Tutorial 9 { 10 public int TutorialID; 11 public string TutorialName; 12 13 public void SetTutorial(int pID,string pName) 14 { 15 TutorialID=pID; 16 TutorialName=pName; 17 } 18 public void SetTutorial(string pName) 19 { 20 TutorialName=pName; 21 } 22 public String GetTutorial() 23 { 24 return TutorialName; 25 } 26 27 static void Main(string[] args) 28 { 29 Tutorial pTutor=new Tutorial(); 30 31 pTutor.SetTutorial(1,"First Tutorial"); 32 Console.WriteLine(pTutor.GetTutorial()); 33 34 pTutor.SetTutorial("Second Tutorial"); 35 Console.WriteLine(pTutor.GetTutorial()); 36 37 Console.ReadKey(); 38 } 39 } 40 }
从运行结果可以看到,First Tutorial 和 Second Tutorial都显示出来了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构