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

virtual 关键字用于声明一个可以在派生类中被重写的成员(方法、属性、索引器或事件),它是实现运行时多态(即“晚绑定”)的必要前提。
没有 virtual,父类的方法默认是“封闭”的——子类即使写一个同名方法,也只是隐藏(hide)而非重写(override),调用时取决于变量的声明类型,不是实际对象类型。加上 virtual,才真正开启多态大门。
virtual 只能修饰非静态、非私有、非密封(non-sealed)、非构造函数的实例成员。
virtual 是“可选重写”,abstract 是“必须重写”(且只能在 abstract 类中);override 必须配合 virtual 或 abstract 使用;而 new 是显式隐藏父类成员,不构成多态,只是屏蔽警告。
iHuzuCMS狐族内容管理系统,是国内CMS市场的新秀、也是国内少有的采用微软的ASP.NET 2.0 + SQL2000/2005 技术框架开发的CMS,充分利用ASP.NET架构的优势,突破传统ASP类CMS的局限性,采用更稳定执行速度更高效的面向对象语言C#设计,全新的模板引擎机制, 全新的静态生成方案,这些功能和技术上的革新塑造了一个基础结构稳定功能创新和执行高效的CMS。iHuzu E
0
比如有个基类 Animal,定义 virtual void Speak();子类 Dog 和 Cat 分别 override 它。那么:
这就是 virtual 支撑起的多态本质:同一调用,不同表现。
基本上就这些。
以上就是C# virtual关键字的作用 - 面向对象多态性的基础的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号