全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

C# virtual关键字的作用 - 面向对象多态性的基础

virtual关键字允许派生类重写父类方法,实现运行时多态;父类用virtual声明可被重写的方法,子类用override提供具体实现,调用时根据实际对象类型确定执行版本,而非引用类型。只有非静态、非私有、非密封的实例成员才能声明为virtual,构造函数、析构函数、静态成员等不可使用。与abstract不同,virtual方法可有默认实现且不强制重写;与new关键字的隐藏机制不同,virtual+override构成真正多态。例如Animal基类定义virtual Speak(),Dog和Cat分别override,通过Animal引用调用Speak时,会动态执行对应子类方法,体现“同一调用,不同行为”的多态特性。

c# virtual关键字的作用 - 面向对象多态性的基础

virtual 关键字用于声明一个可以在派生类中被重写的成员(方法、属性、索引器或事件),它是实现运行时多态(即“晚绑定”)的必要前提。

让子类有机会改变父类的行为

没有 virtual,父类的方法默认是“封闭”的——子类即使写一个同名方法,也只是隐藏(hide)而非重写(override),调用时取决于变量的声明类型,不是实际对象类型。加上 virtual,才真正开启多态大门。

  • 父类中用 virtual 标记方法,表示“我允许子类按需重新定义逻辑”
  • 子类用 override 响应,表示“我明确要替换这个虚方法的具体实现”
  • 调用时,.NET 运行时根据对象的实际类型(而非引用类型)决定执行哪个版本

不是所有成员都能加 virtual

virtual 只能修饰非静态、非私有、非密封(non-sealed)、非构造函数的实例成员。

  • 不能修饰 static 方法:多态依赖实例,静态方法与类型绑定,不参与对象动态分发
  • 不能修饰 private 成员:子类根本不可见,谈不上重写
  • 不能修饰 sealed 类的成员:sealed 类不允许继承,virtual 就失去意义
  • 构造函数、析构函数、运算符重载也不能是 virtual

和 abstract、override、new 的区别要拎清

virtual 是“可选重写”,abstract 是“必须重写”(且只能在 abstract 类中);override 必须配合 virtual 或 abstract 使用;而 new 是显式隐藏父类成员,不构成多态,只是屏蔽警告。

企业黄页模块 for PHPCMS9 GBK 正式版 企业黄页模块 for PHPCMS9 GBK 正式版

PHPCMS V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,优秀的二次开发能力,可满足所有网站的应用需求。 PHPCMS V9企业黄页主要特色1、模型自定义,支持模型添加、修改、删除、导出、导入功能;2、模型字段自定义,支持模型字段添加、修改、删除、禁用操作;3、分类无限添加,支持批量多级添加;4、新增附件字段功能,实现相同模型,不

企业黄页模块 for PHPCMS9 GBK 正式版 0 查看详情 企业黄页模块 for PHPCMS9 GBK 正式版
  • 用 virtual + override → 多态生效,推荐用于扩展行为
  • 用 abstract → 强制子类实现,适合定义契约(如模板方法中的钩子)
  • 用 new → 静态绑定,容易引发歧义,一般应避免

一个典型的小例子

比如有个基类 Animal,定义 virtual void Speak();子类 Dog 和 Cat 分别 override 它。那么:

  • Animal a1 = new Dog(); a1.Speak(); → 输出“汪汪”
  • Animal a2 = new Cat(); a2.Speak(); → 输出“喵喵”
  • 哪怕变量类型都是 Animal,执行的仍是实际对象所属类型的 Speak

这就是 virtual 支撑起的多态本质:同一调用,不同表现。

基本上就这些。

以上就是C# virtual关键字的作用 - 面向对象多态性的基础的详细内容,更多请关注其它相关文章!


# virtual  # 区别  # .net  # speak  # c#  # 百度seo软件都找乐云seo专家  # 萍乡电商营销推广代理商  # 10个网站怎么优化  # 链接营销推广怎么取消  # 常用网站建设软件  # 青岛矩阵seo在线咨询  # 海宁提供企业网站推广优势  # 韶关seo广告投放价格  # 网站seo外链建设  # 常州app营销推广  # 长时间  # 类中  # 绑定  # 而非  # 运算符  # 企业黄页  # 面向对象  # 多态  # 重写  # 子类 


相关文章: 没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  C++如何解决segmentation fault_C++段错误调试与原因分析  Go语言HTML解析:利用Goquery精准获取指定元素内容  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  AI泡沫首次被“刺破”:GPU十年都无法存活!  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  Python多版本共存与虚拟环境管理深度指南  马斯克:Optimus 人形机器人复数形式为 Optimi  163邮箱注册官网 免费申请163个人邮箱  mysql如何设置表访问权限_mysql表访问权限配置  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  从OpenAI API响应中高效提取生成文本  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  最新韩小圈网页版登录入口_官网在线观看官方链接  Go语言JSON解析深度指南:动态访问与结构体映射实践  qq游戏免费畅玩入口_qq游戏电脑版快速启动  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  深入理解Promise链:如何在catch后中断then的执行  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  PHP中高效并行检查多链接状态的教程  知音漫客官网漫画下载_知音漫客网页版阅读记录  使用J*aScript检测输入元素是否包含在特定类中  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  Django表单提交验证失败后保持字段值不刷新  DLsite中文平台入口 DLsite官网内容在线查看  AO3官方可用镜像 Archive of Our Own网页版最新入口  在Go Martini框架中高效服务动态生成图像的实践指南  mysql如何分析事务日志_mysql事务日志分析方法  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  Pandas DataFrame 多条件优先级排序与排名  在Runstone环境中高效处理TasteDive API的JSON数据  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  在哪找SublimeJ远程工具_SFTP插件配置教程  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  Pandas DataFrame:高效添加条件计算列  如何更改在 Excel 中打开超链接时的默认浏览器  实现全屏滚动与导航点:专业教程  win11跳过OOBE三种方法 Win11跳过OOBE设置步骤  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  BetterDiscord插件中安全更新用户简介的实践指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。