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

第一阶段C#基础-15:面向对象梳理

面向对象对象三(四)大特征:封装,继承,多态,(抽象)

1_封装

(1)封装是指将数据(属性)和行为(方法)组合在一个类中,并对外部隐藏对象的内部实现细节

(2)封装的核心概念

  • 数据隐藏:将类内部数据设为私有,只通过公共方法访问

  • 实现隐藏:隐藏类的内部实现细节,只暴露必要的接口

  • 保护数据的完整性:通过方法控制对数据的访问和修改

(3)属性的封装:将字段设为私有的,利用属性控制字段的访问

(4)方法的封装:将方法写在类中,通过类的实例或者类名调用方法

(5)封装的好处:

  • 数据保护:防止外部代码直接修改对象内部的状态

  • 灵活性:可以修改内部实现而不影响使用该类的代码

  • 易于维护:将相关数据和操作组织在一起

  • 减少耦合:类之间通过明确定义的接口交互

  • 数据验证:可以在设置属性时添加验证逻辑

2_继承

(1)继承允许我们基于现有的类创建新的类,实现代码重用

(2)继承的特点:

  • 单继承:c#只支持单继承,一个类只能继承一个父类

  • 传递性:继承关系可以多层传递

  • 所有的类都继承自object:即使没有显示指定,所有的类都隐式继承自System.Object

(3)继承中的访问修饰符:

  • public:任何代码都可访问

  • protected:只有类内部和派生类可访问

  • private:只有类内部可访问(默认)

  • internal:同一程序集内可访问

  • protected internal:同一程序集或派生类可访问

(4)继承的基本语法:使用:

(5)子类的继承函数:当调用子类的构造函数(无参和有参)时,会先调用父类的无参构造,想调用父类的有参构造,需要子类的有参构造使用base(参数),调用父类的有参构造

3_多态

(1)多态:同一个行为具有不同的表现形式和能力

(2)多态的分类:

  • 编译时多态(静态多态):通过方法重载(Method Overloading)和运算符重载(Operator Overloading)来实现。

  • 运行时多态(动态多态):通过继承和接口,以及方法重写来实现

(3)静态多态在编译过程中,通过方法重载和运算符重载来实现,也成为静态绑定和早期绑定

动态多态在运行过程中,通过方法重写,隐藏方法来实现,也称之为动态绑定或者后期绑定

(4)方法重载:同一个函数名不同参数列表

(5)方法重写:

通过virtual和override关键字实现

public class Shape
{public virtual void Draw(){Console.WriteLine("绘制一个形状");}
}public class Circle : Shape
{public override void Draw(){Console.WriteLine("绘制一个圆形");}
}

通过new关键字实现

public class Shape
{public void Draw(){Console.WriteLine("绘制一个形状");}
}public class Circle : Shape
{public new void Draw(){Console.WriteLine("绘制一个圆形");}
}

4_接口

(1)接口:使用java,asp.net等编写的API接口。让其他人通过相应的请求协议(如:http/https)来访问。理解成“在接口服务器上定义多个方法,在客户端上调用这些方法,这样的一个过程,称为请求接口。

(2)C#中的接口:定义一套规则,其他类实现规则。规则===》锲约,合同。 接口必须实现,才能使用。接口也是多态性的表现。

5_类与方法

5.1 普通类:

(1)可以有实例成员,静态成员 实例字段 静态字段 实例方法 静态方法 实例事件 静态事件....不能由抽象方法

(2)访问普通类的成员的时候,要先确定是静态的还是非静态(实例的);静态 使用类名访问;非静态(实例的) 实例化对象访问

5.2 静态类

(1)普通类经过 stati 修饰之后 就会变成静态类

(2)静态类特点:

  • 静态类不能实例化,即不能new,访问静态类中的成员的时候,通过静态类本身

  • 静态类内部不能有非静态成员,只能由静态成员

  • 静态类不支持继承,不能继承其他类,也不能被其它类继承

  • 静态类中的构造函数必须是静态的,而且不能有访问修饰符

(3)静态类作用:封装工具类

5.3 抽象类

(1)抽象类和接口类似,都是为了制定一些规则,由子类去实现这些成员,而不是直接操作抽象类和接口

(2)能够被其他的类继承 也能继承其他的类 但是它里面的抽象方法不能实现

(3)不能实例 抽象类设计出来就是用来被继承的 和密封类是相对

(4)抽象类特点:

  • 抽象类使用abstract 修饰

  • 抽象类中可以实例成员,可以抽象成员 可以有静态成员 可以有虚方法

  • 抽象类不能实例化,抽象类定义了之后,一般不直接使用它,而是使用它的子类

  • 抽象类只有被继承,才有存在的意义

  • 继承抽象类的子类,必须实现抽象类中的抽象成员

5.4 密封类

(1)关键字 sealed,设计不让其他类继承,但可以继承其他类,密封类中能包含 实例方法 静态方法 不能包含抽象方法 虚方法 和密封方法

(2)特点

  • 不能被继承

  • 可以实例化

  • 可以有实例成员,静态成员,不能有抽象成员和虚成员

5.5 抽象方法,虚方法,密封方法

(1)抽象方法(abstruct):抽象方法 不能实现 必须等待子类继承后, 在子类中重写 override;先占个位置 不去实现 等待子类实现;"空壳"

(2)虚方法(virtual):和抽象方法类似 ;虚方法可以有方法体,而且在子类中 不强制重写;虚方法就是为了重写的 是虚拟的 先占位 业务逻辑也可以先写一点,将来在子类中重新实现业务逻辑;继承过来的虚方法 可以重写 也可以不重写

(3)密封方法(sealed override):sealed 修饰成密封方法,不想在后续的子类中重写;sealed 关键字应用在方法上的时候,必须和override 同时使用

必须是继承自父类的方法使用sealed override重写,并不希望后面的子类重写该方法

public sealed  override void SealedFn1(){base.SealedFn1();}
5.6 总结表格
特点\类型普通类静态类抽象类密封类
是否可以实例化
是否可以被继承
是否可以继承其他类
是否有普通成员
是否可以有静态成员
是否可以有抽象成员
是否可以有虚成员
http://www.dtcms.com/a/338409.html

相关文章:

  • python-----机器学习中常用的数据预处理
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【数据分析】R语言在生态学数据分析中的应用:从数据处理到可视化
  • 美图披露半年报:AI应用取得突破,净利润同比大增71.3%
  • C++11列表初始化 {}
  • GitHub Actions 从核心思想到最佳实践
  • 宋红康 JVM 笔记 Day04|双亲委派机制、沙箱安全机制、类的自动使用与被动使用
  • 电子电气架构 --- 软件会给汽车带来哪些变化?
  • 鸿蒙生态7月技术月报 | HarmonyOS 5.1 开发特性详解
  • 蓝池参与雅江水电工程融资,助力国家基础设施建设与经济发展
  • 08.常见文本处理工具
  • 03.文件管理和操作命令
  • 解读60页全面认识大数据基础知识培训【附全文阅读】
  • 8.18 打卡 DAY 45 Tensorboard使用介绍
  • Mysql——前模糊索引失效原因及解决方式
  • 深度强化学习之前:强化学习如何记录策略与价值?
  • Java面试题储备14: 使用aop实现全局日志打印
  • Nodejs学习
  • 【SkyWalking】单节点安装
  • Linux命令大全-rmdir命令
  • Java中的 “128陷阱“
  • vue从入门到精通:轻松搭建第一个vue项目
  • go语言条件语if …else语句
  • rem 响应式布局( rem 详解)
  • 鼠标右键没有“通过VSCode打开文件夹”
  • FreeRTOS【3-1】创建第一个多任务程序复习笔记
  • STM32驱动SG90舵机全解析:从PWM原理到多舵机协同控制
  • Sring框架-IOC篇
  • ​​Java核心知识体系与集合扩容机制深度解析​
  • JavaSE高级-02