当前位置: 首页 > news >正文

C#零基础通关第五篇:吃透属性、继承与多态,彻底精通面向对象三大特性

上一篇我们彻底搞懂了类与对象、构造函数、封装思想成功从“堆砌代码的面向过程”迈入了“模块化的面向对象编程”。我们已经学会了自定义类、实例化对象、私有化数据保护数据安全但想要写出企业级标准代码、实现代码高度复用、适配复杂业务层级仅靠封装远远不够。面向对象编程OOP有三大黄金核心特性封装、继承、多态。上一篇我们掌握了封装本篇将补齐剩余两大核心同时精讲C#专属的**属性Property**语法。属性是封装的现代化升级版继承是代码复用的核心多态是项目解耦、灵活开发的关键。学完本篇你将完整掌握C#面向对象全部核心能力告别初级新手迈入标准开发行列。一、前置回顾为什么要学这三个知识点我们先结合之前的代码梳理痛点明白学习的意义之前我们通过Get/Set方法管控私有字段代码冗余繁琐C#属性就是为了简化封装而生是项目唯一标准写法多个相似的类学生、老师、员工存在大量重复字段和方法反复编写代码浪费效率继承可以实现代码一键复用同一类事物存在不同行为需要灵活适配不同场景多态可以实现一个接口、多种实现让代码更灵活、易扩展。三者结合构成了C#所有项目、框架、游戏开发的底层基石。二、C# 核心语法属性Property——封装的终极形态很多新手分不清字段和属性甚至混用公开字段写代码这是项目开发的大忌。我们从零彻底理清。1. 字段 vs 属性核心区别字段类中定义的普通变量private string _name作用是纯存储数据项目规范要求必须私有禁止外部直接访问属性专门用来读写私有字段的特殊语法是Get/Set方法的语法糖简洁优雅是C#官方推荐的唯一封装写法。2. 完整属性写法带数据校验企业标准完整属性包含私有字段 get读取器 set赋值器支持数据校验完美实现封装。usingSystem;classStudent{// 私有字段仅类内部可访问privatestring_name;privateint_age;// 姓名属性控制读取和赋值publicstringName{get{// 读取数据时返回私有字段return_name;}set{// 赋值时做数据校验过滤非法数据if(!string.IsNullOrEmpty(value)){_namevalue;}}}// 年龄属性带严格范围校验publicintAge{get_age;// 简化Lambda写法set{if(value0value100){_agevalue;}else{Console.WriteLine(年龄输入不合法);}}}}classProgram{staticvoidMain(){StudentstunewStudent();// 通过属性赋值自动触发校验stu.Name张三;stu.Age18;Console.WriteLine($姓名{stu.Name}年龄{stu.Age});// 非法数据被拦截stu.Age-10;}}3. 自动属性开发最常用如果不需要复杂数据校验仅需封装数据可直接使用自动属性系统会自动隐藏生成私有字段代码极度简洁是日常开发高频写法。classStudent{// 自动属性系统自动生成私有字段publicstringName{get;set;}publicintAge{get;set;}// 只读属性仅允许初始化外部无法修改publicintId{get;}}4. 核心总结永远不要在项目中使用 public 公开字段所有对外数据交互统一使用属性这是C#开发的硬性规范。三、面向对象核心继承Inheritance——代码复用神器继承是面向对象三大特性之二核心作用复用已有代码实现层级分类杜绝代码冗余。1. 核心概念父类基类通用、公共的模板类提取所有子类的共性字段和方法子类派生类继承父类的所有非私有成员同时可以扩展自己独有的字段和方法C# 继承语法class 子类 : 父类。2. 继承实战案例场景老师和人员都属于“人”都有姓名、年龄、性别但是老师有工资、学生有成绩通过继承实现代码复用。usingSystem;// 父类人类通用共性classPerson{publicstringName{get;set;}publicintAge{get;set;}// 通用行为publicvoidSayHello(){Console.WriteLine($大家好我是{Name}今年{Age}岁);}}// 子类学生类继承人类classStudent:Person{// 学生独有属性publicintScore{get;set;}publicvoidStudy(){Console.WriteLine(${Name}正在认真学习成绩{Score});}}// 子类老师类继承人类classTeacher:Person{// 老师独有属性publicdoubleSalary{get;set;}publicvoidTeach(){Console.WriteLine(${Name}正在授课月薪{Salary});}}classProgram{staticvoidMain(){// 学生子类复用父类属性和方法StudentstunewStudent();stu.Name张三;stu.Age18;stu.Score95;stu.SayHello();stu.Study();// 老师子类复用父类属性和方法TeacherteanewTeacher();tea.Name李老师;tea.Age35;tea.Salary8000;tea.SayHello();tea.Teach();}}3. 继承核心规则必记C#单继承一个子类只能有一个父类一个父类可以有多个子类继承只会复用public/protected成员私有成员无法继承子类可以扩展新功能不会影响父类实现代码拓展。4. base 关键字调用父类成员子类可以通过base关键字调用父类的属性、方法、构造函数解决子类重写后无法使用父类逻辑的问题。classStudent:Person{publicintScore{get;set;}// 重写方法同时保留父类逻辑publicvoidStudentInfo(){// 调用父类的打招呼方法base.SayHello();Console.WriteLine($我的考试成绩是{Score});}}四、面向对象核心多态Polymorphism——代码灵活的核心多态是三大特性中最抽象、但最实用的特性核心作用一个父类类型适配多种子类对象实现统一调用、不同表现是项目解耦、框架开发的核心基础。1. 多态实现条件缺一不可存在继承关系父类定义virtual 虚方法允许被子类重写子类使用override重写虚方法父类引用指向子类对象。2. 多态完整实战案例usingSystem;// 父类classPerson{// 虚方法允许子类重写publicvirtualvoidShowInfo(){Console.WriteLine(这是人类基础信息展示);}}// 学生子类重写父类方法classStudent:Person{publicoverridevoidShowInfo(){Console.WriteLine(我是学生我的职责是认真学习);}}// 老师子类重写父类方法classTeacher:Person{publicoverridevoidShowInfo(){Console.WriteLine(我是老师我的职责是教书育人);}}classProgram{staticvoidMain(){// 多态核心父类引用 指向 子类对象Personp1newStudent();Personp2newTeacher();// 统一调用方法执行不同子类的逻辑p1.ShowInfo();p2.ShowInfo();}}3. 多态核心价值不需要为每个子类单独写调用方法统一父类接口后续新增子类无需修改原有代码完美符合程序设计的「开闭原则」是大型项目架构的核心思想。五、OOP三大特性整合实战企业级小案例我们整合封装属性 继承 多态完成一个完整可落地的案例打通所有知识点usingSystem;usingSystem.Collections.Generic;// 父类动物类classAnimal{// 封装自动属性publicstringName{get;set;}publicintAge{get;set;}// 虚方法支持多态publicvirtualvoidCry(){Console.WriteLine(动物发出叫声);}}// 子类狗classDog:Animal{publicoverridevoidCry(){Console.WriteLine(${Name}{Age}岁汪汪汪);}}// 子类猫classCat:Animal{publicoverridevoidCry(){Console.WriteLine(${Name}{Age}岁喵喵喵);}}classProgram{staticvoidMain(){// 多态集合统一存储所有子类对象ListAnimalanimalListnewListAnimal(){newDog(){Name旺财,Age2},newCat(){Name橘猫,Age1}};// 统一遍历调用不同对象不同表现foreach(varanimalinanimalList){animal.Cry();}}}六、新手高频易错坑点必避属性混淆不要公开字段自动属性用于常规封装完整属性用于需要数据校验的场景继承误区C#不支持多类继承私有成员无法被继承子类只能拓展不能删减父类功能多态报错重写方法必须严格匹配virtualoverride方法名、参数、返回值必须完全一致base滥用仅需要保留父类逻辑时使用避免代码冗余。七、全文核心总结属性是封装的现代化写法替代冗余的Get/Set方法保护数据安全是C#项目开发唯一标准继承实现代码复用通过父类抽取共性、子类拓展特性简化层级代码多态实现统一接口、差异化执行让代码更灵活、易扩展适配复杂项目架构封装、继承、多态三位一体构成C#面向对象编程的全部核心是后续学习接口、泛型、框架开发的基础。下期预告下一篇我们将精讲C# 静态类、静态成员、常量与只读区分静态与实例的核心差异解决新手分不清静态调用、实例调用的高频问题进一步夯实项目开发基础
http://www.rkmt.cn/news/1373458.html

相关文章:

  • 2026品牌认证ENF级生态板定制家居推荐指南:精材艺匠全屋定制、精材艺匠实木多层板、精材艺匠家具板、精材艺匠香杉双筋超平生态板选择指南 - 优质品牌商家
  • JavaScript——对象
  • Linux系统启动卡住了?手把手教你用systemd-analyze和dmesg诊断UEFI启动各阶段耗时
  • 2026烟台发电机出租:龙口发电机出租、威海发电机出租、日照发电机出租、枣庄发电机出租、柴油机发电机出租、泰安发电机出租选择指南 - 优质品牌商家
  • 从缺页异常看Linux内存管理精髓:写时复制、延迟分配与交换机制
  • 旧电脑别扔!用VMware虚拟机20分钟搞定FydeOS,秒变安卓/Linux双系统学习机
  • 告别跨平台烦恼:手把手教你将Mac上的APFS硬盘/U盘无损转回ExFAT(附磁盘工具分区方案详解)
  • 2026年Q2西南老小区电梯加装服务商排行:加装一台电梯多少钱、四川电梯加装、四川电梯安装公司、家用电梯加装、成都电梯加装费用选择指南 - 优质品牌商家
  • 2026年学术期刊与毕业论文AIGC检测标准差异深度解读:投稿标准比答辩标准更严吗免费完整分析
  • ARM SME指令集:非临时加载与查找表优化详解
  • FSR框架:自动化CUDA内核优化的技术突破
  • 《AI智能体(Agent)深度解析:2026年从被动对话到主动自主工作的技术革命》
  • 2026最新个人AI编程软件实测盘点:独立开发者做副业高效开发必备
  • Android原生代码调试:DS-5环境配置与实战技巧
  • 你的 Java 程序为什么总是先流畅后卡成狗?——JVM 内存、垃圾回收与调优求生指南
  • Mac到手别急着装软件,先搞定这3个基础设置(含开启任意来源命令)
  • LBM强迫场设置实战:如何模拟一个东亚冬季风冷源并可视化其三维结构
  • 2026年至今,黄金回收行业口碑与服务标杆企业深度解析:广州宝奢科技 - 2026年企业推荐榜
  • [智能运维]阿里云正式发布 RCA Benchmark,业界首个面向 Agentic Ops 的根因分析开源基准体系
  • Burp Suite安装配置全指南:Java环境、HTTPS解密与代理故障排查
  • 数组区间和问题——前缀和与 Kadane 算法
  • 环境配置助手 For Mac:可视化管理 macOS 环境变量
  • 3DFlowAction框架:基于3D光学流的跨具身操作学习技术
  • 告别反复格式化!用Ventoy 1.0.97制作一个能装Win10、Ubuntu的万能启动U盘
  • NetworkManager配置静态IP太麻烦?试试CentOS Stream 9的nmcli命令行一键搞定
  • ARMv9 Trace Buffer架构与调试优化实战
  • 防爆组合直膨空调哪家好
  • 2026杭州小红书广告投放技术拆解与靠谱服务商盘点:杭州短视频运营公司、杭州AI搜索优化、杭州GEO优化、杭州SEM广告投放选择指南 - 优质品牌商家
  • 佛山中窄重型门厂家怎么选:佛山高端系统门窗厂家、佛山中窄重型断桥提升门厂家、佛山中窄重型门厂家、佛山全景推拉门窗厂家选择指南 - 优质品牌商家
  • 艾多美非传销远离“一夜暴富”,拥抱“细水长流”