C# 封装、继承、多态 通俗解释

面向对象的三大特性(封装、继承、多态)核心是让代码更安全、更复用、更灵活,下面用「大白话 + 生活例子 + 极简代码」讲解,每个例子都能直接在 C# 控制台程序中运行。

一、封装:藏细节、露接口,保护数据安全

通俗解释

把对象的内部数据(属性)操作数据的方法打包在一起,将核心细节(比如私有属性)隐藏起来,不让外部代码随便修改 / 访问,只提供指定的公共接口供外部使用,同时可以在接口中做数据校验,避免无效 / 错误数据。简单说:不让别人乱改你的东西,要改也得按你的规矩来

生活例子

手机就是封装的典型:你不用知道内部的电路板、芯片怎么工作(隐藏细节),只需要用屏幕、按键、充电口这些公共接口(暴露方法)就能使用,而且手机会自己保护内部零件,不会让你随便拆改。

C# 代码示例(核心:private 私有 + public 公共接口 / 属性)

using System; // 封装的Person类:藏起内部的age,只露公共接口Age供访问/修改 public class Person { // 私有属性:内部细节,外部代码无法直接访问/修改(藏细节) private int _age; // 公共属性:外部唯一的访问接口,带数据校验(露接口) public int Age { get { return _age; } // 读接口:获取年龄 set { // 数据校验:年龄不能小于0,避免无效数据 if (value >= 0) _age = value; else Console.WriteLine("年龄不能为负数,赋值失败!"); } } // 公共方法:外部可调用的行为 public void SayHello() { Console.WriteLine($"大家好,我今年{_age}岁!"); } } // 测试类 class Program { static void Main(string[] args) { Person p = new Person(); // 1. 按规矩修改:赋值有效数据(通过公共接口) p.Age = 20; p.SayHello(); // 输出:大家好,我今年20岁! // 2. 尝试乱改:赋值无效数据(接口会校验并拒绝) p.Age = -5; // 输出:年龄不能为负数,赋值失败! p.SayHello(); // 输出:大家好,我今年20岁!(年龄未被修改) // 3. 错误写法:外部无法直接访问私有属性_age(编译器会报错) // p._age = 30; // 取消注释会提示:无法访问私有字段“_age” } }

代码关键说明

  • private int _age:私有字段,是类的内部细节,外部代码直接访问会编译报错,实现了 “隐藏”;
  • public int Age:公共属性,是外部访问_age唯一接口get用于读取、set用于修改,且set中加了年龄校验,保证数据有效性;
  • 封装的核心实现:访问修饰符private/public/protected等),其中private是封装的关键。

二、继承:子承父业,复用代码 + 扩展功能

通俗解释

一个类(子类 / 派生类)可以继承另一个类(父类 / 基类)的非私有成员(属性、方法),子类不用重复写父类的代码,直接 “继承使用”,同时还能添加自己独有的属性 / 方法,实现功能扩展。简单说:儿子继承父亲的家产和技能,还能自己学新技能

生活例子

学生(Student)和老师(Teacher)都是 “人(Person)”:人有姓名、年龄,会说话;学生继承了人的所有特征,还多了 “学号”,会 “学习”;老师也继承了人的所有特征,还多了 “工号”,会 “教书”—— 不用给学生和老师重复写 “姓名、年龄、说话” 的代码。

C# 代码示例(核心::继承符号,单继承)

C# 中类是单继承(一个子类只能直接继承一个父类),下面基于上面封装的Person类做扩展(直接复用父类的AgeSayHello):

using System; // 父类/基类:人(已封装) public class Person { private int _age; public int Age { get { return _age; } set { if (value >= 0) _age = value; } } // 新增公共属性:姓名(供子类继承) public string Name { get; set; } public void SayHello() { Console.WriteLine($"我是{Name},今年{_age}岁!"); } } // 子类/派生类:学生,继承Person类(核心:Person前面的冒号) public class Student : Person { // 子类独有的属性:父类没有,扩展功能 public string StudentId { get; set; } // 子类独有的方法:父类没有,扩展行为 public void Study() { Console.WriteLine($"我是学生{Name},学号{StudentId},正在学习C#!"); } } // 测试类 class Program { static void Main(string[] args) { Student s = new Student(); // 继承父类的属性:直接使用,不用重新定义 s.Name = "小明"; s.Age = 18; // 继承父类的方法:直接调用 s.SayHello(); // 输出:我是小明,今年18岁! // 子类独有的属性和方法:扩展的功能 s.StudentId = "20260126001"; s.Study(); // 输出:我是学生小明,学号20260126001,正在学习C#! } }

代码关键说明

  • 继承符号:class 子类 : 父类,比如Student : Person表示 Student 继承 Person;
  • 成员复用:子类可以直接使用父类的非私有成员public/protected),比如NameAgeSayHello,无需重复编写;
  • 功能扩展:子类可以新增自己独有的成员(StudentIdStudy),实现父类的功能延伸;
  • 注意:父类的private私有成员(比如_age)子类无法直接访问,只能通过父类的公共接口(比如Age属性)访问。

三、多态:一个接口,多种实现,调用更灵活

通俗解释

同一个方法 / 接口,被不同的对象调用时,会执行不同的逻辑,呈现出不同的行为。简单说:同样的一句话,不同的人说出来,做的事不一样

核心实现前提

  1. 存在继承关系(子类继承父类);
  2. 父类中定义虚方法virtual关键字)或抽象方法;
  3. 子类中重写override关键字)父类的虚方法。

生活例子

父类 “人” 有一个 “工作” 方法,子类 “学生” 和 “老师” 都重写了这个方法:调用 “学生的工作方法”,执行的是 “学习”;调用 “老师的工作方法”,执行的是 “教书”—— 同样是 “工作”,不同对象的行为不同。

C# 代码示例(核心:virtual虚方法 +override重写)

基于前面的Person父类,新增虚方法Work,让StudentTeacher子类分别重写,实现多态:

using System; // 父类/基类:人 public class Person { public string Name { get; set; } public int Age { get; set; } // 虚方法:父类定义方法模板,允许子类重写(核心:virtual关键字) public virtual void Work() { Console.WriteLine("人需要工作/学习,实现自身价值!"); } } // 子类1:学生,重写父类的Work方法 public class Student : Person { public override void Work() // 核心:override关键字重写 { Console.WriteLine($"学生{Name}的工作:认真听课,完成作业,学习知识!"); } } // 子类2:老师,重写父类的Work方法 public class Teacher : Person { public override void Work() // 核心:override关键字重写 { Console.WriteLine($"老师{Name}的工作:认真备课,讲课,批改作业!"); } } // 测试类 class Program { static void Main(string[] args) { // 多态的关键:父类引用 指向 子类对象 Person p1 = new Student(); p1.Name = "小红"; p1.Work(); // 调用的是Student子类的Work方法 Person p2 = new Teacher(); p2.Name = "李老师"; p2.Work(); // 调用的是Teacher子类的Work方法 // 直接实例化父类,调用原始虚方法 Person p3 = new Person(); p3.Work(); // 调用的是Person父类本身的Work方法 } }

运行结果

学生小红的工作:认真听课,完成作业,学习知识! 老师李老师的工作:认真备课,讲课,批改作业! 人需要工作/学习,实现自身价值!

代码关键说明

  1. 虚方法:public virtual void Work(),父类中用virtual标记的方法,表示 “这个方法可以被子类修改 / 重写”,自身有默认实现;
  2. 方法重写:子类中用override标记的方法,必须和父类虚方法的方法名、参数、返回值完全一致,表示 “用子类的逻辑替换父类的默认逻辑”;
  3. 多态核心:父类引用指向子类对象Person p1 = new Student()),此时调用方法时,程序会自动识别对象的实际类型(Student/Teacher),执行对应的重写方法,而非父类的原始方法;
  4. 灵活性:如果后续新增一个 “医生” 子类,只需要继承Person并重写Work方法,无需修改原有代码,符合面向对象的 “开闭原则”。

三大特性核心总结

  1. 封装:用private藏细节、public露接口,保护数据,避免外部乱改(核心:访问修饰符);
  2. 继承:用:实现子承父业,复用父类代码,子类可新增成员扩展功能(C# 类支持单继承);
  3. 多态:用virtual+override实现 “一个接口多种实现”,让代码更灵活,父类引用可适配不同子类对象。

三个特性相互配合:封装是基础(保证数据安全),继承是前提(实现代码复用和扩展),多态是延伸(让扩展后的代码更灵活易维护)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1220205.shtml

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

相关文章

无限制使用!Ai配音工具来了,免费文字转语音神器,支持多角色配音及一键生成视频字幕生成,祈风TTS

下载链接 https://pan.freedw.com/s/YBolZX 软件介绍 祈风 TTS 是一款由民间大神开发的免费配音软件,是一款完全免费的批量文字转语音工具,可以一键把多个文本生成不同的声音,且内置了非常多的人物音色,现在还支持长文本操作 软…

贵金属涨势愈发迅猛 背后核心动因深度解析

进入2026年1月,贵金属市场呈现“加速上涨、白银领跑”的态势,伦敦金现突破5000美元/盎司整数关口,最高触及5093.19美元/盎司;伦敦银现涨幅远超黄金,年内涨幅已超50%,涨势较去年四季度显著提速。这种迅猛涨势…

地下管网的“水质哨兵”如何实现72小时隐患预警?

地下管网水质监测系统是集感知、传输、处理、应用于一体的智能化在线监测体系,可实时采集管网关键节点水质数据,实现异常预警、污染溯源与运维优化,适配地下潮湿、腐蚀、信号弱等复杂环境,广泛用于市政排水、工业园区排污、黑臭水…

效果惊人的好!无需连网,本地离线跨平台一键AI抠图神器,开源免费使用,实用值得收藏 小宾AI抠图

下载链接 https://pan.freedw.com/s/S3fU02 软件介绍 这是我觉得现在功能最全的抠图软件了,效果很不错,而且有个单独的证件照抠图制作;使用开源模型 briaai/RMBG-1.4实现图像抠图,支持单张图像拖拽、粘贴图像和连接、和批量抠图&#xff0…

Pagehelper触发 JVM 类校验失败,Idea 却因 -noverify 藏了雷

问题现象 最近一个老的微服务引入了page-helper 6.0版本的 jar 包之后,微服务发布到环境上去之后直接启动不起来了,报 no such constructor 错误,但是,这个微服务在发布到环境上的时候在本地 Idea 里面启动过,但是在 …

Web测试和App测试的区别

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 相同点从软件测试方法看都需要进行功兼容性测试,能测试、性能测试、GUI测试,安全性测试,易用性测试等从软件测试流程看都需要…

2026成都壁挂炉维修优质服务推荐榜

2026成都壁挂炉维修优质服务推荐榜行业背景与筛选依据据《2026-2026中国家电维修行业发展白皮书》数据显示,成都地区壁挂炉保有量年增长率达18%,冬季供暖季维修需求环比提升47%。但市场服务存在技术水平参差不齐、响…

超纯水哪家口碑好?技术、服务与用户反馈全解析

市场分析 近年来,随着半导体制造、生物医药、高端科研等领域对水质要求的不断提升,超纯水设备市场需求持续增长。据行业数据显示,2026年中国超纯水市场规模已达到约120亿元,年增长率保持在15%以上。其中,半导体(占…

2026成都专业律师事务所推荐榜:成都遗产继承律师事务所、成都刑事律师事务所、成都交通事故罪辩护律师事务所、成都借款纠纷律师事务所选择指南

2026成都专业律师事务所推荐榜 引言据《2026中国刑事法律服务行业白皮书》数据显示,2026年全国刑事法律服务市场规模同比增长18%,其中成都地区因经济活跃度提升、企业合规意识增强,刑事纠纷案件量同比增长15%,刑事…

微美全息(NASDAQ:WIMI)BlockEdge框架:为工业4.0开辟区块链与边缘计算创新之路

工业4.0,作为新工业革命的里程碑,不仅预示着制造业的全面数字化转型,还承载着实现安全、智能、自主和自适应工业物联网(Industrial Internet of Things,IIoT)的宏伟愿景。这一转型不仅仅是技术的迭代升级&a…

使用postgresql、postgis数据库作为存储仓库,发布geoserver矢量切片服务(pbf切片)、矢量切片图层组服务

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏: gis工程师 文章目录一、🍀前言1.1 ☘️GeoServer、pbf矢量切片扩展安装1.2…

NOKOV 度量动作捕捉助力多飞行器集联平台(IAP)高精度定位研究|北理工俞玉树团队成果解读

本文围绕多飞行器集联平台(IAP)的精准定位与控制问题,系统介绍了北理工俞玉树团队基于视觉惯性、多智能体融合与运动学约束的研究进展。通过真实飞行实验验证,借助 NOKOV 度量动作捕捉 提供高精度位姿真值,有效评…

2026最新抗菌316厨具/家用食堂厨具/食品304厨具/纯钛厨具/厨具定制批发推荐:五星厨具专家,20年品质护航

在厨具市场日益注重材质安全与品质体验的今天,选择一款健康、耐用且兼具设计感的厨具至关重要。2026年,在众多厨具品牌中,欧乐多(广州)贸易有限公司(简称“欧乐多”)凭借20余年的行业深耕与卓越的产品实力,成为…

Windows 下隐藏命令行子进程窗口的技术方案

Windows 下隐藏命令行子进程窗口的技术方案 问题背景 在 Windows 平台使用 Rust 开发 GUI 桌面应用时,通过 std::process::Command 调用外部命令行工具会伴随弹出黑色控制台窗口,影响用户体验。 核心机制 Windows 系统提供 CREATE_NO_WINDOW 进程创建…

右键菜单管理

一、右键菜单的用户痛点与工具诞生逻辑 Windows 系统的右键菜单是高频操作入口,但随着软件安装量增加, 会逐渐暴露三大核心痛点: 菜单臃肿冗余:多数软件安装后会强制在右键菜单添加自身选项(如解压、编辑、分享等&…

【大模型开源教程】Llama3-Chinese-8B:专为中文打造的大语言模型,领航智能对话

一、介绍 LLaMA 3 (Large Language Model Meta AI) 是 Meta(原 Facebook)发布的一个大规模预训练语言模型系列的第三代版本。LLaMA 3 旨在推动自然语言处理(NLP)的研究和应用,其系列模型具有较强的语言理解和生成能力…

基于SpringBoot的闪电队篮球俱乐部管理系统的设计与开发(源码+论文+部署+安装)

感兴趣的可以先收藏起来,还有在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望可以帮到大家。 一、程序背景 随着篮球运动的普及,篮球俱乐部日常运营涉及球员、教练、赛程等多维度管理&a…

大型语言模型(LLMs)是怎样“学习”的?一封给网络工程师的大模型指南

数字时代,人工智能(AI)及其相关技术正日益成为许多领域的热门话题。其中,生成式人工智能(Gen AI)和大型语言模型(LLMs)引起了广泛的兴趣和讨论。然而,尽管这些术语在科技…

Node.js 编程实战:部署 Node.js 应用 —— Docker 容器化部署

随着 Node.js 应用从开发环境迁移到生产环境,传统的直接部署方式(如裸机、PM2 守护进程)虽然可行,但在环境一致性、快速部署、可扩展性上仍存在一定局限。 Docker 容器化部署提供了一种轻量、可移植、环境一致的解决方案&#xf…

2026最新家用/食堂厨具品牌推荐!中高端原创厨具权威榜单发布,品质与创新双优之选

引言 随着健康生活理念的深入普及和家庭烹饪需求的多样化升级,消费者对厨具产品的材质安全、设计美学与耐用性能提出了更高要求。然而,当前市场上厨具品牌鱼龙混杂,材质以次充好、设计同质化等问题屡见不鲜,严重影…