对C# 多态的理解

C#多态的理解

什么是多态

多态是定义在父类中的函数被子类继承之后,可以具有不同的实现方式的一种能力。C#中的多态主要有两种实现方式:重载和重写。

重载

重载是通过定义同名的方法,但拥有不同的参数列表,实现多态的一种方式。C#中的重载函数必须拥有不同的参数个数或参数类型,否则编译器无法识别。

下面是一个求两个整数和的函数Add的重载示例:

public int Add(int a, int b)
{
    return a + b;
}

public int Add(int a, int b, int c)
{
    return a + b + c;
}

上述两个Add函数拥有相同的函数名,但参数列表不同,编译器可以根据参数列表来自动选择对应的函数。

重写

重写是通过在子类中重新实现父类的虚方法,从而实现多态的一种方式。子类重写父类的虚方法,可以根据自己的需要改变原有的实现方式,实现自定义的逻辑。

下面是一个求面积的图形Shape类和两个派生类Circle和Rect的重写示例:

public class Shape
{
    public virtual double Area()
    {
        return 0;
    }
}

public class Circle : Shape
{
    private double radius;

    public Circle(double r)
    {
        radius = r;
    }

    public override double Area()
    {
        return Math.PI * radius * radius;
    }
}

public class Rect : Shape
{
    private double width, height;

    public Rect(double w, double h)
    {
        width = w;
        height = h;
    }

    public override double Area()
    {
        return width * height;
    }
}

上述Shape类定义了一个虚方法Area,返回0。Circle类和Rect类继承自Shape类,并重写了Area方法,实现了自己的求面积逻辑。

示例1

Shape[] shapes = new Shape[3];
shapes[0] = new Circle(2);
shapes[1] = new Rect(2, 3);
shapes[2] = new Circle(3);

double totalArea = 0;
foreach (Shape shape in shapes)
{
    totalArea += shape.Area(); // 多态调用
}

Console.WriteLine("图形的总面积为:" + totalArea);

上述示例中,定义了一个Shape类型的数组,其中存放了圆和矩形两种图形。通过对Shape类Area方法的重写,可以根据图形的类型,自动调用对应的求面积方法。最终计算出图形的总面积。

示例2

public class File
{
    public virtual void Open()
    {
        Console.WriteLine("打开文件");
    }
}

public class TextFile : File
{
    public override void Open()
    {
        Console.WriteLine("打开文本文件");
    }
}

public class ImageFile : File
{
    public override void Open()
    {
        Console.WriteLine("打开图像文件");
    }
}

public class VideoFile : File
{
    public override void Open()
    {
        Console.WriteLine("打开视频文件");
    }
}

public class Program
{
    static void Main()
    { 
        File file = new File();
        file.Open();

        file = new TextFile();
        file.Open();

        file = new ImageFile();
        file.Open();

        file = new VideoFile();
        file.Open();
    }
}

上述示例中,定义了一个File类和三个派生类TextFile、ImageFile和VideoFile,分别用来打开不同类型的文件。在Program类中分别创建了一个File对象和三个派生类的对象,并分别调用了它们的Open方法。通过对File类Open方法的重写,可以根据文件类型,自动调用对应的打开方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对C# 多态的理解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 函数指针的一些概念详解

    函数指针的一些概念详解 什么是函数指针? 函数指针实际上就是一个指针变量,它指向的是一个函数。指针变量可以用来存储函数的地址,当程序需要调用该函数时,可以通过函数指针来访问该函数。 声明函数指针的语法如下: 返回类型 (*指针变量名)(参数类型1, 参数类型2, … , 参数类型n) 下面是一个简单的例子: #include <stdio.h&gt…

    C# 2023年6月7日
    00
  • C#实现影院售票系统

    C#实现影院售票系统 系统设计 影院售票系统主要由用户登录、电影信息查询、影院信息查询、座位选择、订单生成等模块组成。 用户登录 用户需输入用户名和密码登录系统,系统需验证用户输入信息,若验证成功则跳转至主页面。 电影信息查询 用户可通过电影名称、导演、演员信息等查询影片信息,系统需提供相应的查询功能。 影院信息查询 用户可通过城市、区域等信息查询影院信息,…

    C# 2023年6月2日
    00
  • C#实现将应用程序设置为开机启动的方法

    下面我会详细讲解如何用 C# 实现将应用程序设置为开机启动的方法。 方法一:使用注册表 Windows 操作系统允许我们通过修改注册表的方式来设置开机启动程序。下面是具体的步骤: 打开注册表编辑器。在 Windows 搜索框中键入 “regedit” 并回车即可打开。 找到以下注册表路径:HKEY_CURRENT_USER\SOFTWARE\Microsof…

    C# 2023年6月7日
    00
  • C# DatagridView常用操作汇总

    C# DataGridView常用操作汇总 前言 在C# Winform应用程序开发中,DataGridView是一个非常实用的控件,它可以用来显示和编辑数据,而且比起ListView控件来说更加灵活,功能更加丰富。在本攻略中,我们会介绍DataGridView控件的常用操作,包括如何绑定数据源、如何设置单元格样式、如何实现排序过滤和单元格合并等。 绑定数据…

    C# 2023年5月15日
    00
  • 详解C# 中的正则表达式运用

    详解C#中的正则表达式运用 什么是正则表达式? 正则表达式(Regular Expression)是一种用来描述、匹配特定字符集合的字符串。一般用来做文本处理和字符串匹配,包括但不限于文本查找、替换、分割、提取等。 正则表达式的语法 具体的正则表达式语法非常复杂,这里只介绍C#的正则表达式语法常用的部分。 文本匹配 匹配单个字符:可以直接使用字符本身表示。例…

    C# 2023年6月8日
    00
  • C#生成随机数的方法小结

    C#生成随机数的方法小结 介绍 在编程中,如何生成随机数是常见的需求。C#提供了多种生成随机数的方法,本文将对这些方法进行小结介绍。 Random类 Random类是C#提供的随机数生成类,它可以生成伪随机数序列。以下是使用Random类生成随机数的示例: Random random = new Random(); int randomNumber = ra…

    C# 2023年5月31日
    00
  • C#9.0 新特性简介

    C#9.0 新特性简介 简介 C#9.0是.NET 5.0的一部分,推出于2020年11月10日。这个版本包含了许多改进和新增功能,其中一些功能是简化代码,提高应用程序开发效率的。 新特性列表 1.记录(class / struct) C#9.0提供了一个新的记录(type),类似于元组(tuple)。它使用户能够将多个相关数据组合在一起并使用一种更简洁的方…

    C# 2023年6月7日
    00
  • ASP.NET生成图形验证码的方法详解

    ASP.NET生成图形验证码的方法,可以通过以下步骤实现: 1. 引用命名空间 首先,在代码文件中引用命名空间: using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Web; usin…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部