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

相关文章

  • Java import static及import原理区别解析

    Java import static及import原理区别解析 在Java中,我们可以使用import语句来导入其他类或接口的定义,以便在当前类中使用它们。除了常规的import语句外,Java还提供了import static语句,用于导入静态成员。本文将详细讲解Java import static及import原理区别解析。 import语句 在Java…

    C# 2023年5月15日
    00
  • 遍历文件系统目录树的深入理解

    遍历文件系统目录树的深入理解 遍历文件系统目录树是我们在开发的过程中经常会用到的操作之一,可以用来查找文件、文件夹,或者对一个文件夹下面的所有文件进行批量处理。本文将介绍如何使用 Python 的 os 模块来遍历文件系统目录树。 使用 os.walk() 方法 Python 提供了 os.walk() 方法,它可以用来遍历目录树。这个方法的返回值是一个迭代…

    C# 2023年6月8日
    00
  • 用C#实现启动另一程序的方法实例

    下面我会介绍用C#实现启动另一个程序的方法实例。 准备工作 在C#中,我们可以通过Process类来启动另一个程序。在使用Process类前,需要引入System.Diagnostics命名空间。同时,我们需要确定要启动的程序的具体位置(即可执行文件的路径)。 启动程序 以下是用C#启动程序的示例代码: using System.Diagnostics; /…

    C# 2023年6月7日
    00
  • C#中如何限制TextBox控件内输入值的范围

    以下是C#中如何限制TextBox控件内输入值的范围的详细攻略: 步骤一:创建一个TextBox控件 首先,我们需要在我们的窗体上创建一个TextBox控件。这可以通过拖动和放置窗体设计器上的文本框控件来完成,或者通过以下代码创建: TextBox textBox1 = new TextBox(); this.Controls.Add(textBox1); …

    C# 2023年6月6日
    00
  • 解决C# 截取当前程序窗口指定位置截图的实现方法

    要解决C#截取当前程序窗口指定位置截图的问题,我们可以使用以下方法进行实现。 方法一:使用Win32 API实现 1.引用System.Runtime.InteropServices命名空间。 2.定义下面的结构体和函数: [StructLayout(LayoutKind.Sequential)] public struct Rect { public in…

    C# 2023年6月3日
    00
  • c#数据绑定之将datatabel的data添加listView

    将DataTable的数据添加到ListView实际上可以分为两个步骤:第一步是将DataTable的数据转换成ListViewItem的集合,第二步是将ListViewItem的集合添加到ListView。接下来就具体的讲解一下这个过程。 第一步:数据转换 为了将DataTable的数据添加到ListView中,我们需要先将DataTable的数据转换成L…

    C# 2023年6月1日
    00
  • 网上考试设计思路是怎样的?

    网上考试设计思路的流程可以分为以下几步: 步骤一:需求分析 在设计网上考试前,我们需要首先进行需求分析。在这一步中,我们需要识别和了解用户的需求和期望。我们需要回答以下问题: 谁将参加考试? 学生,员工或其他人员? 考试的种类和水平?选择题,填空题,还是主观题?考试难度是初级、中级还是高级? 考试的时间和考试的长度?通常适合多长时间的考试,考试又要持续多长时…

    C# 2023年6月7日
    00
  • ASP.NET MVC扩展带验证的单选按钮

    以下是“ASP.NET MVC扩展带验证的单选按钮”的完整攻略: 什么是ASP.NET MVC扩展带验证的单选按钮 ASP.NET MVC扩展带验证单按钮是种机制,允许开发人员在MVC应用程序中使用自定义HTML助手扩展单选按钮,并添加验证规则种机制可以助开发人员更轻松地处理单选按钮,并提高用户体验。 ASP.NET MVC扩展带验证的单选按钮步骤 ASP.…

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