首页 > 编程语言 >C#中的重写与多态知识点整理(刘铁锰老师课堂笔记)

C#中的重写与多态知识点整理(刘铁锰老师课堂笔记)

时间:2023-07-24 14:44:35浏览次数:34  
标签:知识点 MakeSound C# 方法 多态 Animal 基类 重写

在C#中,重写(Override)和多态(Polymorphism)是面向对象编程中的重要概念。通过重写和多态,我们可以更好地组织和管理代码,提高代码的可维护性和可扩展性。

重写(Override)

重写是指在派生类中重新实现基类中已经定义的方法。通过重写一个方法,我们可以为派生类中的该方法提供新的实现,同时让程序在运行时动态地选择调用哪个实现。

多态(Polymorphism)

多态是指一个对象可以具有多种形态。在面向对象编程中,多态性允许我们通过一个基类引用来操作不同的派生类对象,从而提供更大的灵活性。
在C#中,要重写一个方法,需要满足以下条件:

  • 基类中该方法必须标记为virtual、abstract或override。
  • 派生类中要重写的方法必须使用override关键字进行标记。
  • 重写方法的签名(包括方法名、参数类型和返回类型)必须与基类中被重写的方法一致。

下面是两个简单的示例,演示了如何重写基类中的方法:
例1:

		class program
	{
		static void Main(string[] args)
		{
			var c = new Car();
			c.Run();
		}
	}

	class Vehicle
	{
		public virtual void Run()
		{
			Console.WriteLine("I'am running.");
			Console.ReadKey();
		}
	}

	class Car:Vehicle
    {
        public override void Run()
        {
            Console.WriteLine("Car is running!");
            Console.ReadKey();
        }
    }

在上面的例1中,Vehicle类定义了一个virtual方法Run(),而Car类通过override关键字重写了该方法。通过在Main()方法中创建Car的对象,并调用Run()方法,实现了子类Car对父类Vehicle方法的重写。
例2:

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The cat meows");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The dog barks");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal animal1 = new Animal();
        Animal animal2 = new Cat();
        Animal animal3 = new Dog();

        animal1.MakeSound(); // 输出:"The animal makes a sound"
        animal2.MakeSound(); // 输出:"The cat meows"
        animal3.MakeSound(); // 输出:"The dog barks"
    }
}

在上面的例2中,Animal类定义了一个virtual方法MakeSound(),而Cat和Dog类通过override关键字重写了该方法。通过在Main()方法中创建不同的对象,并调用它们的MakeSound()方法,实现了多态性。

在上述例2中,Animal类充当了基类,而Cat和Dog类则是基类的派生类。通过声明一个Animal类型的引用,我们可以将其指向Cat或Dog类的对象,这正是多态的体现。

多态性的一个重要特点是在运行时确定调用哪个方法的实现,而不是在编译时确定。这种动态绑定的特性使得我们可以根据具体的对象类型来执行相应的代码,从而实现更灵活和可扩展的程序结构。

综上所述,C#中的重写和多态是实现面向对象编程的重要机制。通过重写方法,我们可以为派生类提供新的实现。而多态性允许我们使用基类引用来操作派生类对象,提供了更大的灵活性和可扩展性。

标签:知识点,MakeSound,C#,方法,多态,Animal,基类,重写
From: https://www.cnblogs.com/jack-jiang0/p/17509185.html

相关文章

  • AT_abc218_d 题解
    洛谷链接&Atcoder本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给定一个平面内的\(N\)个点的坐标,求这\(N\)个点中选\(4\)个点可构成正方形的方案数。注:构成的正方形的边需平行于\(x\)轴或\(y\)轴。例如下图就不符合要求,则不考虑这种情况:......
  • Linux系列---【CentOS 7通过MSTSC连接远程桌面】
    安装对应的yum源yumlistlightdmxorgxrdpxrdp可以看到这些软件都在epel中,如果没有的话,请先安装对应的yum源。命令如下:yuminstall-yepel-release确认yum源没有问题之后,我们就可以进行安装了。安装lightdmxorgxrdpxrdplightdm提供了图形登录界面和用户会话管理......
  • AT_abc215_d 题解
    洛谷链接&Atcoder链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给定\(N\),\(M\)及含有\(N\)个整数的序列\(A\)。求\(1\simM\)中与所有\(a_i\)均互质的整数及个数。思路首先说一下最开始的想法。直接暴力枚举\(1\simM\)的数,再分......
  • 【项目实战】Kafka 重平衡 Consumer Group Rebalance 机制
    ......
  • 经典!H3C交换机基本配置请收好
    下午好,我的网工朋友。思科和华为的交换机配置命令,一些交换机应用配置案例,给你们说过不少,可以根据关键词搜索直达哈。部分网工新人表示,有些配置文章不好理解,看不明白命令。思来想去,正好华三的交换机配置也没给你系统讲过,今天来一篇华三的,给你整一整H3C交换机配置相关内容。恢复出厂......
  • ABC311
    T1:FirstABC模拟代码实现n=int(input())s=input()A=B=C=Falseforiinrange(n):ifs[i]=='A':A=Trueifs[i]=='B':B=Trueifs[i]=='C':C=TrueifAandBandC:exit(print(i+1))......
  • 编写高质量代码改善程序的157个建议:使用Dynamic来简化反射的实现
    概述最近在看《编写高质量代码改善C#程序的157个建议》。看到第15个建议的时候,结合平时使用的习惯发现有部分出入,没有对不对的说法,只是使用习惯有点区别,跟随着我们来看一看。第15条建议是:使用dynamic简化反射的使用。dynamic的确可以简化反射的使用,但是从性能上来说是有......
  • 美丽的夕阳qsnctfwp
    题目附件查看图片,放大左侧发现建筑物上8个字:龙腾公寓/福阳集团根据文字在搜索引擎中查找,并由此确定城市通过百度地图全景地图查看当地桥梁,并与照片比对调整地图比例尺,记录桥名根据提示qsnctf{河北-石家庄-张桥-李桥}拼接flag并提交即可-End-......
  • Python【19】 torch.randn( ) 返回标准正态分布张量
    参考:https://pytorch.org/docs/stable/generated/torch.randn.html......
  • MIT 6.5840 Raft Implementation(2B, Log Replication)
    Raft实现思路+细节(2B)任务分解2B中最主要的任务就是进行日志的复制。Raft是一个强领导人的系统,这意味着所有的日志添加都是由领导人发起的,与之相类似的,还有很多其他的结论(它们都是比较显然的),读者可以自行证明。我们可以这样地分解复制日志的过程我们首先需要完善Raft结构......