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

C#面向对象

在C#开发中,面向对象编程是最核心、最基础也是最重要的编程思想,无论做 Winform、ASP.NET、Unity 还是.NET Core 开发,都离不开面向对象。这篇文章我把 C# 面向对象的所有核心知识点系统化总结。

一、什么是面向对象

1. 核心思想

把现实世界的事物抽象成程序中的(对象),用类(Class)描述对象的特征和行为,让代码更易复用、扩展、维护。

举个通俗例子:猫

1)猫(Cat 猫类)

有什么(属性):名字、颜色、年龄

能做什么(方法):吃饭、睡觉、喵喵叫

2)具体的猫(实例化对象)

  • 对象 1:大橘,黄色,2 岁

  • 对象 2:小黑,黑色,1 岁

对比:面向过程 vs 面向对象

  • 面向过程:关注一步步怎么做」比如:煮面 → 烧水→下面→加料
  • 面向对象:关注(谁来做),只关心对象和行为,代码更好复用、维护。

2. 两个核心概念

  • 类(Class):对象的模板 / 蓝图,定义属性(特征)和方法(行为)
  • 对象(Object):类的实例,是具体的个体

二、C# 面向对象四大核心特性

这是 OOP 的灵魂,面试必问,开发必用

1. 封装(Encapsulation)

1)概念

把对象的状态(属性)行为(方法)捆绑在一起,隐藏内部实现细节,只对外暴露安全的访问接口。

2)作用

  • 保护数据,防止被随意修改

  • 降低耦合,提高代码安全性

3)关键字

private(私有)、public(公开)、protectedinternal

public class Student { // 私有字段:外部无法直接访问 private int _age; // 公开属性:安全访问私有字段 public int Age { get { return _age; } set { // 逻辑校验:封装核心 if (value >= 0 && value <= 150) _age = value; } } }

2. 继承(Inheritance)

1)概念

一个类(子类 / 派生类)可以继承另一个类(父类 / 基类)的非私有成员,实现代码复用。

2)规则

  • C# 是单继承:一个类只能有一个直接父类

  • 子类可以扩展父类,也可以重写父类方法

  • object是所有类的终极基类

3)关键字

:base(访问父类成员)、overridevirtual

// 父类 public class Animal { public virtual void Shout() { Console.WriteLine("动物叫"); } } // 子类:继承Animal public class Dog : Animal { // 重写父类方法 public override void Shout() { Console.WriteLine("汪汪汪"); } }

3. 多态(Polymorphism)

1)概念

同一个方法,不同对象执行出不同结果,让程序更灵活。

2)实现方式

虚方法 + 重写virtual+override

抽象类 + 抽象方法

接口实现

Animal animal = new Dog(); animal.Shout(); // 输出:汪汪汪 → 多态效果

4. 抽象(Abstraction)

1)概念

只关注对象的核心功能,忽略无关细节,把通用特征抽成抽象类 / 接口。

2)两种实现

  • 抽象类(abstract class)

    • 可以包含抽象成员、普通成员、字段

    • 不能实例化

    • 子类必须实现所有抽象方法

  • 接口(interface)

    • 只有方法 / 属性声明,没有实现

    • 一个类可以实现多个接口

    • 完全抽象

// 抽象类 public abstract class Shape { public abstract double GetArea(); // 抽象方法 } // 接口 public interface IRunnable { void Run(); }

三、类与对象的核心语法

1. 成员分类

  • 字段(Field):存储数据
  • 属性(Property):安全访问字段
  • 方法(Method):行为逻辑
  • 构造函数:创建对象时初始化
  • 析构函数:释放资源
  • 索引器委托事件

2. 构造函数

  • 与类同名,无返回值
  • 创建对象时自动调用
  • 支持重载
  • 无参构造函数:默认存在,写了有参构造后会消失
public class Person { public string Name; public int Age; // 构造函数 public Person(string name, int age) { Name = name; Age = age; } }

3. this 关键字

  • 指代当前对象
  • 区分同名成员
  • 调用本类其他构造函数

四、访问修饰符(控制权限)

修饰符访问范围
public所有地方都能访问
private仅当前类内部
protected当前类 + 子类
internal同一程序集内
protected internal同一程序集 或 子类

开发原则:尽量用最小权限,优先 private,需要时再公开

五、方法重写 vs 方法隐藏

1. 重写(override)

  • 父类:virtual
  • 子类:override
  • 多态生效,调用子类实现

2. 隐藏(new)

  • 子类用new关键字
  • 不参与多态,父类引用调用父类方法
public class Parent { public void Show() { } } public class Child : Parent { public new void Show() { } // 隐藏 }

六、抽象类 vs 接口

对比特性抽象类(abstract)接口(interface)
继承规则只能继承一个父类,单继承可以同时实现多个接口,多实现
内部成员能写字段、属性、普通方法、构造函数,既有规范也能写现成代码主要是方法 / 功能规范声明,C#8 之后可以写默认方法实现,偏向纯功能定义
访问权限可以自由设置私有、公有等多种权限内部成员默认全部为公有的,不能私自隐藏
使用场景描述本身是什么,属于「父子同类」关系描述能干什么,属于「额外附加能力」

七、静态与实例(static)

  • 实例成员:必须new对象才能访问
  • 静态成员:属于类,直接用类名访问,全局唯一
  • 静态类不能实例化,不能被继承
  • public class Tool { public static void Help() { } } Tool.Help(); // 直接调用
http://www.jsqmd.com/news/710855/

相关文章:

  • 如何快速掌握SubFinder字幕查找器:新手终极实战指南
  • 苍穹外卖订单状态流转设计:从下单到完成的全链路解析
  • 3步终极指南:免费开源工具G-Helper快速解决华硕笔记本性能瓶颈
  • 保姆级教程:将QtMqtt库集成到你的QT Creator项目中(以SimpleClient为例)
  • 艾尔登法环 DirectX 闪退怎么办?2026最新修复步骤与原因排查
  • 中文心理咨询对话数据集架构解析与AI心理健康应用实现
  • Vosk-API深度解析:从源码编译到生产部署的完整技术指南
  • Sunshine游戏串流终极教程:5步搭建你的私人云游戏平台
  • 音乐解锁完整指南:如何在浏览器中免费解密加密音乐文件
  • Cursor编辑器AI代码导航规则配置实战:提升开发效率的智能跳转指南
  • 强化学习探索策略优化与GRPO框架实践
  • JVM 学习第七天:JVM 终结篇——执行引擎+内存模型+调优实战+大厂面试压轴题(无重复)
  • 大语言模型与信息检索工具链的工程实践
  • 第二十三篇技术笔记:郭大侠学DoIP - 扒扒DoIP报文的“底裤”
  • EvidenceLoop框架:解决RAG多跳推理难题的创新方案
  • Kettle 9.4 源码编译踩坑记:从JDK版本冲突到成功打包的完整复盘
  • 影刀RPA如何实现店群自动化:告别单体臃肿,构建基于插件化架构与动态热更新的高并发引擎
  • 告别盲猜!用示波器实测福特/通用OBD波形,手把手解析J1850 PWM与VPW协议差异
  • 如何用CATS进行API负向测试?从入门到精通的完整教程
  • WCF webHttpBinding is open for web browser and wpf
  • LLM工具调用面试篇4
  • Box86深度解析:ARM架构上的x86用户空间模拟器技术实现机制
  • 英语单词发音MP3音频批量下载方案:构建海量语音库的技术实现
  • 突破QQ音乐限制:高效QMCFLAC转MP3完整指南
  • HCLA第五次作业
  • 深度解析:如何通过三层架构设计实现Cursor Pro功能的技术实现方案
  • 5分钟解锁Windows桌面新美学:用TranslucentTB打造你的专属透明任务栏
  • 山东大学软件学院项目实训-基于语言大模型的智能居家养老健康守护系统-个人博客(三)
  • 5分钟搞定!魔兽争霸III WarcraftHelper插件完全指南:解锁300帧+宽屏完美体验
  • 告别调参玄学:用PANNs预训练模型搞定音频分类,附AudioSet实战代码