iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#中多态性学习/虚方法/抽象方法和接口怎么使用
  • 101
分享到

C#中多态性学习/虚方法/抽象方法和接口怎么使用

2023-07-05 17:07:20 101人浏览 泡泡鱼
摘要

这篇文章主要介绍了C#中多态性学习/虚方法/抽象方法和接口怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中多态性学习/虚方法/抽象方法和接口怎么使用文章都会有所收获,下面我们一起来看看吧。1. 多态

这篇文章主要介绍了C#中多态性学习/虚方法/抽象方法和接口怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中多态性学习/虚方法/抽象方法和接口怎么使用文章都会有所收获,下面我们一起来看看吧。

1. 多态性定义

C#中的多态性是OOP(面向对象编程)的一个基本概念,它允许一个对象在不同情况下表现出不同的行为,以增强代码的可重用性和灵活性。

根据网上的教程,我们得知C#多态性分为两类,静态和动态。但实际上,C#没有严格的静态和动态多态性的分法。之所以这么分,还是为了我们便于理解,我们沿用这个思维来大概分类:

采用函数重载或运算符重载方法的,属于静态多态性;

采用虚方法、抽象方法、接口等方式,属于动态多态性。

拓展:

在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。什么意思呢?

在静态语言中,许多多态性的特性可以在编译时确定,编译器可以根据数据类型的信息来确定方法的调用方式。

而在动态语言中,数据类型的确定通常是在运行时进行的,这种行为被称为动态多态性。

2. 函数重载示例

函数重载是指在同一个类中,定义多个方法,它们的方法名相同,但是参数类型、参数数量、参数顺序不同。以下是一个函数重载的例子:

public class Calculator{    public int Add(int a, int b)    {        return a + b;    }    public int Add(int a, int b, int c)    {        return a + b + c;    }    public float Add(float a, float b)    {        return a + b;    }    public double Add(double a, double b)    {        return a + b;    }}

在这个例子中,Calculator类定义了4个Add()方法,它们的方法名相同但是参数列表不同(分别有2个整型参数、3个整型参数、2个浮点型参数、2个双精度浮点型参数)。这些方法根据声明的参数类型和数量而得到不同的签名,因此构成函数重载,当调用Add()方法时,编译器会根据参数的类型和数量来选择正确的方法重载进行调用。

3. 虚方法示例

虚方法和重写(override)方法:在父类中声明一个虚方法,子类可以重写该方法并实现自己的行为。在运行时,程序根据对象的实际类型调用相应的方法。这种方式也称为“消除静态绑定”。

注意事项:虚方法是使用关键字 virtual 声明的。同时继承类中的重写虚函数需要声明关键字 override 。下面是一个示例:

// 定义一个Animal类和其子类class Animal{    public virtual void Speak()    {        Console.WriteLine("I am an animal.");    }}class Dog : Animal{    public override void Speak()    {        Console.WriteLine("Woof!");    }}class Cat : Animal{    public override void Speak()    {        Console.WriteLine("Meow!");    }}// 示例程序class Program{    static void Main(string[] args)    {        Animal[] animals = new Animal[2];        animals[0] = new Dog();        animals[1] = new Cat();        foreach (Animal animal in animals)        {            animal.Speak();        }        Console.ReadKey();    }}

在这个例子中,Animal类中声明了一个虚方法Speak(),它的子类 Dog 和 Cat 分别对该方法进行了重写。在Main 方法中,创建了一个 Animal 数组,其中存放了 Dog 和 Cat 的实例。在foreach循环中,程序根据实际对象类型调用了不同的Speak()方法,实现了多态性的效果。

小拓展:关键字重写 override 与覆盖 new 较为容易搞混,有关两者区别可移步:C#中重写(override)及覆盖(new)的区别详解。

4. 抽象方法示例

抽象方法是在抽象类中定义的,它没有具体实现的代码,而只是定义了方法的名称、参数和返回值类型等信息。抽象方法必须在子类中进行完整的实现,否则子类本身也必须定义为抽象类。使用abstract关键字来定义抽象类和抽象方法。

下面的示例演示了如何定义并使用抽象方法:

abstract class Shape {  public abstract double Area(); // 定义抽象方法Area()}// 派生类Rectangle继承抽象类Shapeclass Rectangle : Shape  {  double width, height;  public Rectangle(double w, double h)   {    width = w;    height = h;  }    public override double Area() // 实现抽象方法Area()  {    return width * height;  }}class Triangle : Shape  {  double baseValue, height;  public Triangle(double bv, double h)   {    baseValue = bv;    height = h;  }    public override double Area() // 实现抽象方法Area()  {    return baseValue * height * 0.5;  }}class Program {  static void Main(string[] args)   {    Rectangle r = new Rectangle(5, 8);    Console.WriteLine("矩形的面积 = {0}", r.Area());    Triangle t = new Triangle(5, 8);    Console.WriteLine("三角形的面积 = {0}", t.Area());  }}

上面的代码定义了Shape类和两个派生类Rectangle和Triangle。Shape类中定义了一个抽象方法Area(),并在Rectangle和Triangle中实现了这个抽象方法。在Main方法中,创建了一个Rectangle对象 r 和一个Triangle对象 t,并分别调用它们的Area()方法计算出它们的面积。

5. 接口示例

C#接口是一种约定,是一个抽象的类型,它定义了一组公共的方法、属性、索引器和事件,这些成员没有实现细节和实现代码,只定义了接口的行为。

5.1 接口语法

定义接口的语法如下:

interface 接口名称
{
  方法1
  方法2
  属性1
  索引器1
  事件1
}

其中,方法、属性、索引器和事件都是接口的成员,它们都没有实现,只是定义了行为的名称和参数。

方法定义的语法如下:返回类型 方法名称(参数列表);

属性定义的语法如下:属性类型 属性名称 { get; set; }

索引器定义的语法如下:索引器类型 this[索引器参数] { get; set; }

事件定义的语法如下:event 事件委托类型 事件名称;

其中,事件委托类型是一个Delegate类型。

5.2 接口使用示例

定义一个接口之后,可以通过继承或实现来使用接口。接口的继承使用“:”符号,需要注意的是,如果一个类实现了一个接口,那么它必须实现接口中所有的方法和属性。下面是接口示例:

interface IShape{  double Perimeter();  double Area();}interface ICircle : IShape{  double Radius { get; set; }}interface IRectangle : IShape{  double Width { get; set; }  double Height { get; set; }}class Circle : ICircle{  public double Radius { get; set; }  public double Perimeter()  {    return 2 * Math.PI * Radius;  }  public double Area()  {    return Math.PI * Radius * Radius;  }}class Rectangle : IRectangle{  public double Width { get; set; }  public double Height { get; set; }  public double Perimeter()  {    return 2 * (Width + Height);  }  public double Area()  {    return Width * Height;  }}class Program{  static void Main(string[] args)  {    Circle c = new Circle();    c.Radius = 1;    Console.WriteLine("Circle:  Perimeter = {0}, Area = {1}", c.Perimeter(), c.Area());    Rectangle r = new Rectangle();    r.Width = 2;    r.Height = 3;    Console.WriteLine("Rectangle:  Perimeter = {0}, Area = {1}", r.Perimeter(), r.Area());  }}

上面的代码定义了IShape、ICircle和IRectangle三个接口、以及Circle和Rectangle两个类。其中,Circle类实现了ICircle接口,Rectangle类实现了IRectangle接口。在Main方法中,创建了一个Circle对象和一个Rectangle对象,并给它们的属性赋值。然后分别调用了Circle和Rectangle对象的Perimeter()和Area()方法输出结果。

运行程序,输出以下结果:

Circle:  Perimeter = 6.28318530717959, Area = 3.14159265358979
Rectangle:  Perimeter = 10, Area = 6

可以看到,通过使用接口,我们可以很方便地定义出不同的形状,然后计算出它们的周长和面积。这就展示了接口在C#编程中的重要地位。

关于“C#中多态性学习/虚方法/抽象方法和接口怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C#中多态性学习/虚方法/抽象方法和接口怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: C#中多态性学习/虚方法/抽象方法和接口怎么使用

本文链接: https://www.lsjlt.com/news/353801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中多态性学习/虚方法/抽象方法和接口怎么使用
    这篇文章主要介绍了C#中多态性学习/虚方法/抽象方法和接口怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中多态性学习/虚方法/抽象方法和接口怎么使用文章都会有所收获,下面我们一起来看看吧。1. 多态...
    99+
    2023-07-05
  • C#接口、抽象类、抽象方法和虚方法的区别是什么
    C#接口、抽象类、抽象方法和虚方法的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#抽象类和接口孩子间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,...
    99+
    2023-06-17
  • JAVA抽象类和抽象方法怎么使用
    在Java中,抽象类是用来定义一组相关类的共同特征和行为的。抽象类不能被实例化,只能被继承。要定义一个抽象类,需要在类的声明前加上关...
    99+
    2023-08-17
    JAVA
  • 探究PHP中静态方法与抽象方法的特性和用法
    PHP中静态方法与抽象方法的特性和用法 在PHP编程中,静态方法和抽象方法是两种不同的方法类型,它们在面向对象编程中发挥着重要的作用。本文将探究PHP中静态方法与抽象方法的特性和用法,...
    99+
    2024-03-05
    php 静态方法 php 抽象方法 特性用法
  • php中抽象方法怎么使用
    这篇文章主要介绍了php中抽象方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php中抽象方法怎么使用文章都会有所收获,下面我们一起来看看吧。什么是抽象方法?一个抽象方法是没有实现代码的方法。它只是定...
    99+
    2023-07-05
  • java抽象方法怎么使用
    Java中的抽象方法使用需要遵循以下步骤:1. 在父类中声明抽象方法,使用`abstract`关键字修饰,不提供方法体。例如:```...
    99+
    2023-08-25
    java
  • 在Python中使用静态,类或抽象方法
    方法是存储在类属性中的函数,你可以用下面这种方式声明和访问一个函数 >>> class Pizza(object): ... def __init__(self, size): ... ...
    99+
    2023-01-31
    抽象 静态 方法
  • PHP中静态方法和抽象方法的区别及应用场景
    PHP中静态方法和抽象方法都是面向对象编程中重要的概念,它们分别有着不同的特点和应用场景。本文将具体介绍PHP中静态方法和抽象方法的区别,并给出相应的代码示例来帮助读者更好地理解这两种...
    99+
    2024-03-05
    应用场景 php中静态方法 php中抽象方法 php面向对象编程
  • PHP中的抽象类和接口怎么使用
    这篇文章主要介绍“PHP中的抽象类和接口怎么使用”,在日常操作中,相信很多人在PHP中的抽象类和接口怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的抽象类和接口怎么使用”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • C++中关于多态实现和使用方法
    目录赋值兼容实例多态静多态动多态格式实例override纯虚函数含有虚函数的析构函数注意事项RTTItypeidtypecast多态实现虚函数一般继承(no override)一般继...
    99+
    2024-04-02
  • PHP编程中静态方法和抽象方法的实际应用对比
    PHP编程中静态方法和抽象方法的实际应用对比 在PHP编程中,静态方法和抽象方法是两种常用的方法类型,它们在实际应用中有着不同的作用和用法。本文将通过具体的代码示例来对比静态方法和抽象...
    99+
    2024-03-05
  • Python中静态方法,类方法,属性方法怎么使用
    本篇内容介绍了“Python中静态方法,类方法,属性方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.静态方法通过@static...
    99+
    2023-06-30
  • 使用java怎么在接口中继承静态方法
    本篇文章给大家分享的是有关使用java怎么在接口中继承静态方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:...
    99+
    2023-06-14
  • 多态的魔力:利用 ASP 中的接口和抽象类实现灵活性和可扩展性
    在软件开发中,多态性是一种强大的工具,它允许创建灵活且可扩展的解决方案。利用 ASP.NET Core 中的接口和抽象类,我们可以实现多态性,从而使代码更易于维护和扩展。本文将探讨 ASP.NET Core 中多态性的概念及其在实际应用程...
    99+
    2024-03-04
    多态、接口、抽象类、ASP.NET Core、灵活性、可扩展性
  • Java8新特性之接口中的默认方法和静态方法详解
    目录一、前言二、为什么在 Java 接口中使用默认方法?三、为什么在 Java 接口中使用静态方法?四、场景一:接口中的默认方法五、场景二:接口中的静态方法六、情景三:多重继承 - ...
    99+
    2024-04-02
  • C# 中的多态底层虚方法调用详情
    目录一、C# 中的多态玩法1. 一个简单的 C# 例子2. 汇编代码分析(1)eax,dword ptr [ebp-8](2)eax,dword ptr [eax](3)eax,dw...
    99+
    2024-04-02
  • php中什么是抽象方法?如何使用?
    PHP是一种流行的编程语言,用于Web开发,其中类是一个重要的概念。在PHP中,类可以定义抽象方法,这些方法的实现被留给子类,以便在运行时实现。通过使用抽象类和方法,PHP程序员可以设计出可重用性更高,更可靠的代码。本文将介绍PHP类定义抽...
    99+
    2023-05-14
    抽象方法 php
  • 实现Golang中多态性的方法和用途
    Golang中如何利用接口实现多态性在Golang中,接口是一种强大的特性,可以实现多态性,即一个对象可以以不同的形态呈现。利用接口实现多态性能够提高代码的可扩展性和可维护性。本文将通过介绍接口的定义、接口的实现和多态性的实例,来阐述在Go...
    99+
    2023-12-29
    接口 Golang 多态性
  • 以实例为基础,探索Golang中多态特性的学习方法
    通过实例学习Golang中的多态特性 多态是面向对象编程中的一个重要概念,它允许我们使用统一的接口来处理不同类型的对象。在Golang中,多态是通过接口来实现的。接口定义了对象的行为,而不关心对象的具体类型。...
    99+
    2024-01-29
    学习 实例 多态特性
  • 深入理解Java8新特性之接口中的默认方法和静态方法
    1.接口中的默认方法和静态方法 Java 8中允许接口中包含具有具体实现的方法,该方法称为 “默认方法” ,默认方法使用 default 关键字修饰。 接口默认方法的 ” 类优先 ”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作