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

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.mzph.cn/news/787827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的个性化点餐配送系统

基于SSM的个性化点餐配送系统 功能需求 本个性化点餐配配送系统总体上分为前端模块与后端模块,前端模块按照使用者的不同分为用户模块、商户模块、配送员模块。用户模块分为注册登录功能、个人信息修改功能、点餐功能。商家模块分为注册登录功能、商家信息修改功能…

FastAPI Web框架教程 第11章 请求响应的进阶用法

11-1 直接使用Request对象 关于请求的操作,比如从URL中提取路径参数,获取查询参数,获取请求头,获取Cookie,获取请求体中的数据;这些参数和值的获取非常方便,这是因为FastAPI帮我们创造便利。 F…

iOS系统文件路径解析:探索苹果手机中各类重要文件的存储位置

​ 目录 引言 用户登录工具和连接设备 查看设备信息,电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同,无法直接访问系统文件…

从《布瓦尔与佩库歇》实践中学习社会科学概论

从《布瓦尔与佩库歇》实践中学习社会科学概论 前情提要《布瓦尔与佩库歇》实践笔记云藏山鹰社会科学概论报告核心--信息形数身知™意合™意气实体过程意气实体过程宇宙学诠释™ 社会科学概论花间流风版导读,马斯克风格演讲[ 一尚韬竹团队供稿;] 内容展开…

音乐家马常旭当选为中华名人库委员会副主席

4月2日,据中华名人库官网显示,马常旭已当选为中华名人库委员会副主席。此前马常旭是一名音乐家、中国内地著名男歌手。 马常旭资料 马常旭,男,汉族,2002年10月生,辽宁大连人。现任中华名人库委员会副主席&…

数据结构第二版-陈越 第1章 概论

定义: 题或例子: 循环和递归两种方法 循环体不同

neutron 运维命令

OpenStack Neutron是OpenStack云计算平台的网络组件,负责管理和连接虚拟机(VM)和其他计算资源之间的网络。Neutron提供了一组API和插件,以便实现各种网络拓扑和服务,支持虚拟网络和物理网络的管理、配置和调度&#xf…

AtCoder Beginner Contest 347 (B,C,D,E)

B - Substring (atcoder.jp) 问题陈述 您将得到一个由小写英文字母组成的字符串 S 。 S 有多少不同的非空子字符串? 子字符串是一个连续子序列。例如, xxx 是 yxxx 的子字符串,但不是 xxyxx 的子字符串。 解析: 对于数据范围不超过100&…

vk-unicloud 框架 H5 浏览器无法登录访问 Client platform is h5, but web was found in config

最开始出现的bug 进入云函数查看日志 Client platform is h5, but web was found in config 把这个问题扔到百度是没有答案的,但是找到一个类似问题 :Client platform is app, but app-plus was found in config. 顺藤摸瓜到uniCloud的官方文档 关于pr…

MNN介绍安装编译详解

MNN是一个高效、轻量的深度学习框架,它支持深度模型的推理与训练,尤其在端侧的推理与训练性能在业界处于领先地位。MNN已经在阿里巴巴的多个App中使用,覆盖多个场景,同时在IoT等场景下也有若干应用。它支持TensorFlow、Caffe、ONN…

python coding with ChatGPT 专题2| 全解递归算法

文章目录 递归与栈的关系如何思考递归汉诺塔 经典题目入门:斐波那契数列分治法:归并排序树的递归遍历组合问题:子集搜索问题:N皇后 拓展阶乘的迭代法斐波那契数列迭代法青蛙跳 参考文献 掌握递归是解决许多编程问题的关键&#xf…

isaacgym 渲染黑屏

问题描述: isaacgym安装完IsaacGym_Preview_4_Package.tar.gz之后,运行python joint_monkey.py没有任何内容现实,但是终端还是正常输出信息。 环境是ubuntu22服务器,python3.8,nvidia Driver Version: 515.65.01 CUDA…

Google HTML/CSS 风格指南

1、Background 背景 本文档定义了 HTML 和 CSS 的格式和样式规则。它旨在 改善协作、代码质量并启用支持基础设施。 它适用于使用 HTML 和 CSS 的原始工作文件,包括 GSS 文件。 工具可以自由地混淆、缩小和编译,只要通用代码 保持质量。 2、常规 2.1、…

【JavaSE】解密 继承和多态(下)

前言 紧接着上篇 解密继承和多态(上)~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 protected关键字 在同一包下同一类可以访问 代码理解 在同一包下不同类可以访问 代码理解 …

HarmonyOS 应用开发之LifecycleForm接口切换LifecycleApp接口切换 LifecycleApp接口切换

LifecycleForm接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口onCreate?(want: Want): formBindingData.FormBindingData;ohos.app.form.FormExtensionAbility.d.tsonAddForm(want: Want): formBindingData.FormBindingData;onCastToNormal?(formId: string…

蓝桥杯每日一题:壁画(前缀和)

题目描述: Thanh 想在一面被均分为 N 段的墙上画一幅精美的壁画。 每段墙面都有一个美观评分,这表示它的美观程度(如果它的上面有画的话)。 不幸的是,由于洪水泛滥,墙体开始崩溃,所以他需要加…

Octavia Venture 成立,打造数十亿美元规模的 AI 价值体系

​随着 OpenAI 相继发布 ChatGPT、Sora 等 AIGC 大模型后,AI 赛道的发展迎来了一轮又一轮的热潮,这也让极具想象力的 AI 赛道涌入大量资金,比如英伟达股票市值短时间内从 1 万亿美元暴涨至 2 万亿美元,就是最好的佐证。当然&#…

Linux ssh免密登录配置

步骤 在本地机器上生成公钥和私钥对。将本地公钥复制到远程机器的~/.ssh/authorized_keys文件中。 实现1 在服务器上生成SSH密钥对 ssh-keygen -t rsa -f /home/id_rsa1ssh-keygen: 这是一个用于生成、管理和转换 SSH 密钥的 OpenSSH 工具。-t rsa: 用于指定要生成的密钥类…

Memcached 教程之 Memcached replace 命令(七)

Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。 语法: replace 命令的基本语法格式如下: replace key flags exptime bytes [noreply] value…

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…