C#面:虚函数和抽象函数的区别

news/2025/2/19 3:55:08/

C#中的虚函数和抽象函数都是实现多态性的重要概念,但它们有一些区别。

定义方式:
  • 虚函数:在基类中使用 virtual 关键字定义,可以在派生类中被重写。
  • 抽象函数:在抽象类或接口中使用abstract 关键字定义,必须在派生类中被实现。
实现方式:
  • 虚函数:在基类中提供默认的实现,派生类可以选择性地重写该函数来提供自己的实现。
  • 抽象函数:在抽象类或接口中只定义函数的签名,没有具体的实现,派生类必须实现该函数。
使用场景:
  • 虚函数:适用于基类已经有默认实现,但允许派生类根据需要进行修改或扩展的情况。
  • 抽象函数:适用于基类无法提供默认实现,而需要派生类必须实现的情况。
调用方式:
  • 虚函数:可以通过基类的引用或指针来调用,实际执行的是派生类的重写版本。
  • 抽象函数:必须通过派生类的实例来调用。

下面是示例:

// 虚函数示例
class Animal
{public virtual void MakeSound(){Console.WriteLine("动物发出声音");}
}class Dog : Animal
{public override void MakeSound(){Console.WriteLine("修狗汪汪汪汪");}
}// 抽象函数示例
abstract class Shape
{public abstract double GetArea();
}class Rectangle : Shape
{private double length;private double width;public Rectangle(double length, double width){this.length = length;this.width = width;}public override double GetArea(){return length * width;}
}class Program
{static void Main(string[] args){Animal animal = new Animal();animal.MakeSound();  // 输出:动物发出声音Animal dog = new Dog();dog.MakeSound();  // 输出:修狗汪汪汪汪Shape rectangle = new Rectangle(5, 3);Console.WriteLine(rectangle.GetArea());  // 输出:15}
}


http://www.ppmy.cn/news/1404545.html

相关文章

LeetCode 977 有序数组的平方(双指针法)

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 […

项目实战:电影评论情感分析系统

目录 1.引言 2.数据获取与预处理 3.构建文本分类模型(使用LSTM) 4.结果评估与模型优化 4.2.结果评估 4.2.模型优化 5.总结 1.引言 在本篇文章中,将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数…

基于Keras, OpenCv, PyQt5表情检测系统

1. 前言 在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络、深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛。面部的表情中包含了太多的信息,轻微的表情变化都会反映出人…

深度学习:基于PyTorch的模型解释工具Captum

深度学习:基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时,我们通常只关注模型的整体性能,例如准确率或损失函…

Ubuntu20.04安装MatlabR2018a

一、安装包 安装包下载链接 提取码:kve2 网上相关教程很多,此处仅作为安装软件记录,方便后续软件重装,大家按需取用。 二、安装 1. 相关文件一览 下载并解压文件后,如下图所示: 2. 挂载镜像并安装 2…

idea、pycharm、datagrip2023版全家桶安装+激活+性能优化

前序 内容:在windows11环境,以idea为例教大家安装、激活idea、pycharm、datagrip2023最新版本全家桶并性能优化 一、下载安装JDK 1、下载JDK 官网链接:https://www.oracle.com/java/technologies/downloads/archive 下载需要注册账户&…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…

Rust---复合数据类型之字符串(1)

目录 字符串字符串与切片字符串切片字符串操作追加(Push)插入 (Insert)替换 (Replace) 字符串 Rust 在语言级别,只有一种字符串类型: str,它通常是以引用类型出现 &str。虽然语言级别只有上述的 str 类型&#xf…