C# 面向对象:基础概念
目录面向过程 vs 面向对象1. 思维模式的转换最难的点2. 组织方式数据与行为的归属3. 扩展性开闭原则的体现对象Object对象的特征类Class(1)类的组成:(2)this关键字(3)访问修饰符Access Modifiers构造函数1.无参构造2.有参构造3.构造函数重载在同一个类中定义多个构造函数只要参数不同即可。1为什么需要构造函数重载2构造函数重载 this4.静态构造函数Static Constructor常见用途5.私有构造函数Private Constructor静态成员static静态字段静态方法静态成员的核心特点静态类Static Class面向过程 vs 面向对象维度面向过程 (POP)面向对象 (OOP)核心思想按步骤解决问题按“对象”建模世界组织方式函数 数据类 对象关注点“怎么做”“谁来做”扩展性差好典型语言CJava / C# / C1. 思维模式的转换最难的点POP流程思维逻辑流关注每一步如何执行。OOP对象思维逻辑流关注哪个对象负责这个动作。2. 组织方式数据与行为的归属POP数据是“公开的”函数随意操作数据容易导致数据被误修改。OOP数据属性和行为方法绑定。外部只能通过“方法”访问数据这就是封装。3. 扩展性开闭原则的体现POP 痛点增加一个新功能如新支付方式往往需要修改原有的if-else或switch语句牵一发而动全身。OOP 优势通过继承创建新的子类如WechatPay继承Payment无需修改原有稳定的父类代码。面向过程是“我一步步做”面向对象是“我指挥对象去做”。对象Object对象是类的实例Instance类Class模板 / 蓝图不占内存对象Object根据类创建出来的具体实例占用实际内存对象 数据 行为对象的特征1.占用实际内存类本身只是定义不分配堆内存new创建对象时才在堆内存中为属性分配空间2.表示现实世界的一个具体事物类 → “学生”抽象概念对象 → “张三18岁”具体个体3.每个对象相互独立不同对象的属性值互不影响类Class类是对象的模板 /(1)类的组成:成员作用字段Field存储对象状态属性Property封装字段方法Method定义对象行为构造函数初始化对象(2)this关键字this表示当前对象实例用途区分成员变量与参数调用当前类的其他构造函数传递当前对象用法示例区分字段与参数this.name name;调用本类方法this.Introduce();调用本类构造函数: this(...)(3)访问修饰符Access Modifiers修饰符说明public任何地方可访问private仅本类内部protected本类 子类internal同一程序集protected internalprotected OR internal构造函数与类名相同无返回值用于初始化对象在new对象时自动调用完成对象初始状态设置规则说明与类名相同Person无返回值连void都不能写自动调用new时执行1.无参构造未显式定义构造函数时编译器会默认提供一旦定义了有参构造默认无参构造消失写了有参构造后若仍需无参构造必须手动补上。2.有参构造用于创建对象时直接赋值3.构造函数重载在同一个类中定义多个构造函数只要参数不同即可。方法名相同必须是类名参数个数 / 类型 / 顺序不同1为什么需要构造函数重载场景说明多种初始化方式有的对象需要完整信息有的只需要部分提高灵活性调用者按需选择简化对象创建避免大量重复赋值代码2构造函数重载 this用this复用构造函数逻辑减少重复代码好处代码集中修改一处全部生效更易维护4.静态构造函数Static Constructor特点说明自动调用类首次使用前无参数不能带参数只执行一次线程安全无访问修饰符不能写public/private常见用途初始化配置缓存日志系统5.私有构造函数Private Constructor构造函数被private修饰不能在类外部使用new创建对象。用途目的单例模式保证全局只有一个实例工具类禁止创建类的实例私有构造函数 vs 公有构造函数对比项私有构造函数公有构造函数能否new不能能使用场景单例 / 工具类普通对象对象数量0 或 1任意设计意图限制对象创建允许自由创建私有构造函数用于禁止类被实例化常用于工具类只含静态方法和单例模式保证全局只有一个实例静态成员static静态成员属于类本身而不是某个具体的对象。静态字段特点说明属于类不依附于对象所有对象共享一处改处处变生命周期长程序运行期间一直存在静态方法特点所有对象共享无需实例化不能访问非静态成员静态成员的核心特点特点说明属于类通过类名访问无需实例化不能用new不能访问非静态成员不能直接使用实例字段 / 方法所有对象共享全局唯一副本静态成员 vs 实例成员对比项静态成员实例成员归属类对象访问方式类名.成员对象.成员是否共享是否生命周期程序级对象级静态类Static Class限制限制说明不能被实例化不能new不能有实例成员只能包含static自动密封不能被继承静态类常见用途 工具类Math、Convert扩展方法全局辅助方法