当前位置: 首页 > 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.lryc.cn/news/624584.html

相关文章:

  • 论往返之迴响:时间之织锦与信息之曼舞
  • 第三十二天(并发)
  • 如何在VS Code中使用Copilot与MCP服务器增强开发体验
  • 【C++】 using声明 与 using指示
  • 云原生Ansible渗透场景(⾃动化的运维⼯具)
  • Netty架构与组成
  • 45 C++ STL模板库14-容器6-容器适配器-优先队列(priority_queue)
  • 贪心算法(Greedy Algorithm)详解
  • 【C语言】gets和getchar的区别
  • 深度优先遍历dfs(模板)
  • 具身智能2硬件架构(人形机器人)摘自Openloong社区
  • 数据结构:查找表
  • 宏观认识 Unitree LiDAR L1 及其在自动驾驶中的应用
  • 【opencv-Python学习日记(7):图像平滑处理】
  • 阿里云odps和dataworks的区别
  • Poisson分布:稀有事件建模的理论基石与演进
  • 前端纯JS实现手绘地图 地图导引
  • YAML 语法结构速查表(完整版)
  • 【tips】unsafe-eval线上页面突然空白
  • Lucene 8.5.0 的 `.pos` 文件**逻辑结构**
  • 永磁同步电机控制算法--转速环电流环超螺旋滑模控制器STASMC
  • 大数据毕业设计选题推荐:基于Hadoop+Spark的城镇居民食品消费分析系统源码
  • 【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
  • 将 iPhone 联系人转移到 Infinix 的完整指南
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 【Python语法基础学习笔记】常量变量运算符函数
  • 分布式系统的“不可能三角”:CAP定理深度解析
  • flask——4:请求与响应
  • 敏感数据加密平台设计实战:如何为你的系统打造安全“保险柜”
  • 实战演练:通过API获取商品详情并展示