上一篇我们彻底搞懂了类与对象、构造函数、封装思想成功从“堆砌代码的面向过程”迈入了“模块化的面向对象编程”。我们已经学会了自定义类、实例化对象、私有化数据保护数据安全但想要写出企业级标准代码、实现代码高度复用、适配复杂业务层级仅靠封装远远不够。面向对象编程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# 静态类、静态成员、常量与只读区分静态与实例的核心差异解决新手分不清静态调用、实例调用的高频问题进一步夯实项目开发基础