• C#中抽象方法与虚方法的区别详解及示例


    1. 抽象方法与虚方法的区别

      先说两者最大的区别:抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现。

    如果需要了解虚方法及抽象方法具体的定义和语句,请移步:C#多态性学习,虚方法、抽象方法、接口等用法详解

    我们具体看个例子来帮助理解,首先是虚方法

    public class Shape
    {
        public virtual double CalculateArea()
        {
             return 0;
        }
    }
    
    public class Circle : Shape
    {
        public double Radius { get; set; }
    
        public override double CalculateArea()
        {
            return Math.PI * Radius * Radius;
        }
    }
    
    public class Square : Shape
    {
        public double SideLength { get; set; }
    
        public override double CalculateArea()
        {
            return SideLength * SideLength;
        }
    }

      在这个例子中,Shape类定义了一个虚方法CalculateArea(),它返回0。Circle和Square类分别继承Shape类并重写了该方法,实现了自己的计算面积的方法。

    抽象方法

    public abstract class Shape
    {
        public abstract double CalculateArea();
    }
    
    public class Circle : Shape
    {
        public double Radius { get; set; }
    
        public override double CalculateArea()
        {
            return Math.PI * Radius * Radius;
        }
    }
    
    public class Square : Shape
    {
        public double SideLength { get; set; }
    
        public override double CalculateArea()
        {
            return SideLength * SideLength;
        }
    }

      在这个例子中,Shape类定义了一个抽象方法CalculateArea(),因为它是一个抽象方法,所以没有提供实现。Circle和Square类继承Shape类并强制实现了该方法
      抽象类是无法被实例化的,但是它可以作为父类被继承。抽象类中可以定义抽象方法,子类必须实现这些抽象方法。这种方式也称为“强制静态绑定”。

    总结

    虚方法和抽象方法都是实现多态性的方式,但它们有以下几点不同:

      1.实现方式不同:虚方法是在父类中声明方法并使用virtual关键字标识,子类可以使用override关键字对该方法进行重写并实现自己的行为;而抽象方法是在父类中声明方法并使用abstract关键字标识,子类必须实现这些抽象方法。
    抽象方法只能在抽象类中声明,虚方法不是。如果类包含抽象方法,那么该类也是抽象的,也必须声明类是抽象的。

      2.是否需要实现:虚方法可以有默认的实现,而抽象方法必须由子类进行实现。如果一个子类没有实现其父类中定义的所有抽象方法,则子类必须被声明为抽象类。

      3.类型限制:使用虚方法实现多态性时,代码会被解释为运行时代码,程序需要查找对象类型以确定调用的方法。使用抽象方法时,代码会被解释为静态代码,编译器会强制实现所有抽象方法。

      4.设计用途:虚方法适用于有默认实现的情况,且子类可能需要更改其行为的情况,例如重构代码时需要改变方法的实现。抽象方法适用于接口定义和强制子类实现该类的一些操作的情况。

    总的来说,虚方法和抽象方法是实现多态性的两种不同方式,具体使用哪一种方式取决于代码的设计需要。虚方法允许子类通过重写方法实现自己的行为,而抽象方法通常用于定义接口和限制子类的操作。


    __EOF__

  • 本文作者: LetmeBaby
  • 本文链接: https://www.cnblogs.com/letmebaby/p/17262016.html
  • 关于博主: 学无止境,积少成多;热爱为内驱,运用即反馈
  • 版权声明: 版权声明:LetmeBaby原创,转载请注明出处
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    [ vulhub漏洞复现篇 ] 阿里巴巴Nacos身份验证绕过(nacos未授权)(CVE-2021-29441)
    【Java 进阶篇】JDBC PreparedStatement 详解
    【cut命令】
    《游戏编程模式》学习笔记(十)更新方法 Sequencing Patterns
    【100天精通Python】Day51:Python 数据分析_数据分析入门基础与Anaconda 环境搭建
    基于阿基米德优化优化的BP神经网络(分类应用) - 附代码
    Codeforces Round #811 A~F
    mybatis-plus集成分页插件,针对多数据源分页失效的问题
    SwiftUI 内功之探索 SwiftUI 中的渲染,了解 SwiftUI 何时重新渲染子视图
    【Proteus仿真】【STM32单片机】智能助眠机系统设计
  • 原文地址:https://www.cnblogs.com/letmebaby/p/17262016.html