对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日

相关文章

  • C#滑动验证码拼图验证功能实现(SlideCaptcha)

    C#滑动验证码拼图验证功能实现(SlideCaptcha)攻略 问题描述 在网站或移动应用等中,为了防止恶意攻击或机器人入侵,通常需要进行验证码验证。其中,滑动验证码拼图验证功能是一种常见的形式,用户需要按照要求把滑块拖动到正确的位置上,才能通过验证。 本文将介绍如何使用C#语言,结合ASP.NET Web应用程序,来实现滑动验证码拼图验证功能的开发。 解决…

    C# 2023年5月31日
    00
  • Entity Framework使用ObjectContext类

    Entity Framework是一个用于.NET平台的ORM(Object Relational Mapping)框架,它的主要目的是将对数据库的操作简化为对象的操作。ObjectContext是Entity Framework中用于管理对象和数据库之间映射关系的核心类之一。 使用ObjectContext可以完成以下操作:1. 定义实体:使用Object…

    C# 2023年6月3日
    00
  • ASP.NET Core使用EF查询数据

    下面是关于“ASP.NET Core使用EF查询数据”的完整攻略,分为以下几个部分: 环境配置 创建数据库 安装EF 使用EF查询数据 1. 环境配置 在使用ASP.NET Core开发前,需要进行环境配置,具体步骤如下: 安装Visual Studio 2017或更高版本 下载安装.NET Core SDK 安装ASP.NET Core模板 2. 创建数据…

    C# 2023年6月3日
    00
  • .NET下模拟数组越界的方法详解

    下面我来详细讲一下“.NET下模拟数组越界的方法详解”的攻略。 标题 首先,我们需要明确一下,什么是数组越界。当我们在使用数组时,访问了不存在的数组下标,就会发生数组越界,而这个错误往往会导致程序崩溃或异常。 在.NET中,我们可以通过模拟数组越界的方法来测试代码的鲁棒性和容错性。下面是模拟数组越界的具体步骤: 步骤1:创建一个数组 首先,我们需要创建一个数…

    C# 2023年5月31日
    00
  • 完美解决c# distinct不好用的问题

    以下是关于“完美解决c# distinct不好用的问题”的完整攻略: 问题描述 在 C# 中使用 Distinct() 方法可以去除一个集合中的重复元素,但是如果需要去除自定义类中的成员变量重复的方法时,经常会遇到以下两个问题: 需要先实现 IEqualityComparer 接口; 直接使用 Distinct() 方法对 List 自定义类对象去重会报错。…

    C# 2023年6月1日
    00
  • C# 7.2中结构体性能问题的解决方案

    C# 7.2中结构体性能问题的解决方案 背景 C# 中的结构体常常被用来存储一些小型的数据结构,这是因为结构体比类更加轻量级,占用的空间更少,因此在性能要求较高的场景下,结构体通常优于类。但是,在C# 7.2之前,结构体也存在一些性能问题,这些问题在一些特定的情况下会导致性能急剧下降。此问题已在C# 7.2中得到了解决。 问题描述 在C# 7.2之前,当对一…

    C# 2023年6月7日
    00
  • C# 判断字符为空的6种方法的效率实测对比

    我来详细讲解“C# 判断字符为空的6种方法的效率实测对比”的完整攻略。 1. 引言 在C#编程中,判断字符是否为空是一项非常基础的操作。为了提高代码效率,我们需要选择最合适的方法。本文从六种不同的判断字符为空的方式进行效率实测,以便找到一种最优解。 2. 方法介绍 以下是六种不同的判断字符为空的方式: 2.1 判断字符串是否为空或null if (strin…

    C# 2023年6月1日
    00
  • C#中Dictionary几种遍历的实现代码

    下面是“C#中Dictionary几种遍历的实现代码”的完整攻略: 1. Dictionary简介 Dictionary是C#中常用的字典数据结构,它存储的是键值对(key-value pairs),其中每一个key在集合中是唯一的,对应一个value。Dictionary允许快速查找value,因为它内部维护了一个根据key进行快速查找的哈希表。 2. D…

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