新闻中心

C#怎么创建抽象类 C# abstract class与virtual方法

2025-12-14
浏览次数:
返回列表
抽象类用abstract声明,不可实例化,只能继承;可含已实现成员和必须由子类重写的abstract成员;含abstract成员的类必须声明为abstract;子类须override所有abstract成员,除非自身也声明为abstract。

c#怎么创建抽象类 c# abstract class与virtual方法

在C#中,抽象类用 abstract 关键字声明,不能被直接实例化,只能被继承;它用来定义一组通用行为的“模板”,其中可以包含已实现的方法,也可以包含必须由子类实现的抽象成员(如 abstract 方法或属性)。

怎么创建抽象类

使用 abstract 修饰类,并可选地包含 abstract 成员和普通成员:

  • 类名前加 abstract,例如:abstract class Animal
  • 抽象类中可以有普通方法(带实现)、字段、属性、构造函数,也可以有 abstract 方法(无方法体,以分号结尾)
  • 只要类中有一个 abstract 成员,该类就必须声明为 abstract(但反过来不成立:abstract 类可以没有 abstract 成员,只是不能被 new)
  • 子类继承抽象类时,必须用 override 实现所有 abstract 成员,除非子类也声明为 abstract

abstract 方法 vs virtual 方法

两者都支持多态,但语义和约束不同:

  • abstract 方法:只有声明,没有实现;强制子类重写(override),不可用 sealed 或 virtual 修饰;只能出现在 abstract 类中
  • virtual 方法:有默认实现;子类可选择性 override(也可不重写,直接用父类逻辑);所在类不必是 abstract;可被 sealed override 阻止进一步重写
  • 二者都不能是 private(因为需要被子类访问),通常用 protected 或 public

一个对比示例

下面代码展示了 abstract 类中同时包含 abstract 和 virtual 方法:

Glarity Glarity

Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。

Glarity 131 查看详情 Glarity
abstract class Shape
{
    // 抽象方法:子类必须实现
    public abstract double GetArea();
<pre class="brush:php;toolbar:false;">// 虚方法:子类可选择重写
public virtual void Draw() => Console.WriteLine("绘制一个图形");

// 普通方法:直接可用
public void Info() => Console.WriteLine($"面积:{GetArea()}");

}

class Circle : Shape { public double Radius { get; set; }

public override double GetArea() => Math.PI * Radius * Radius; // 必须实现

public override void Draw() => Console.WriteLine($"绘制圆形,半径{Radius}"); // 可选重写

}

常见使用场景建议

  • 当多个类有共同结构但具体行为差异大时,用 abstract 类统一接口,强制规范子类能力
  • 想提供默认行为但允许子类定制,优先用 virtual;想强制子类参与设计,用 abstract
  • 避免滥用 abstract 类——如果只是想复用代码,普通基类 + virtual 方法往往更灵活
  • 抽象类不能 sealed,也不能同时被 abstract 和 static 修饰

基本上就这些。关键记住:abstract 是“必须实现”,virtual 是“可以改写”。选哪个,取决于你对子类的约束意图。

以上就是C#怎么创建抽象类 C# abstract class与virtual方法的详细内容,更多请关注其它相关文章!


# 多个  # 鼓楼网站建设推荐  # 什么推广网站好河池  # 网店的营销策略推广方案  # seo新手怎么注册  # seo优化关键词排名培训班  # 建设网站jians  # 网站推广宝靠谱吗  # 青岛网站建设收费明细  # 关键词本地搜索排名怎么做  # seo站内优化简历  # c#  # 重试  # 多态  # 等功能  # 可选  # 类中  # 多线程  # 抽象类  # 重写  # 子类 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 必由学网页版入口 必由学官方平台直接访问  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  限制HTML日期输入框的日期选择范围  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  微博网页版主页入口 微博官方网站免登录访问  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  多闪网页版在线观看免费入口_多闪官网访问入口  Composer如何在生产环境安全地执行composer update  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  微信聊天记录怎么加密_微信聊天记录加密方法  C++如何解决segmentation fault_C++段错误调试与原因分析  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  优化Log4j2控制台输出性能:解决异步日志瓶颈  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  浏览器打开即用 美图秀秀网页版入口  将HTML Canvas内容转换为可上传的图像文件(File对象)  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置  Angular中父组件异步更新子组件复选框状态的实践指南  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  J*aScript map 迭代中检测空数组元素的有效方法  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  Go语言中JSON数据解码与字段访问指南  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  excel怎么制作工资条 excel快速生成工资条的方法  J*a递归快速排序中静态变量导致数据累积问题的解决方案  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  德邦快递查询平台 德邦快递物流信息查询入口 

搜索