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

八股 -- C#

面向对象 (三大特性)

三大特性目的是为了提供更好的代码组织、可维护性、扩展性和重用性

C#基础——面向对象 - 知乎 (zhihu.com)

 

封装

理解:
你不需要了解这个方法里面写了什么代码,你只需要了解这个方法能够给你返回什么数据,比如:toString()方法,不知道怎么实现的,反正就是可以把值的类型转换为字符串类型。
优点:
其实就是把可以重复使用的代码,用方法装载起来,传入参数,返回参数;让代码更加容易维护,这样就不必每次访问这个属性的时候,还需要再写一次重复的代码。

 封装(Encapsulation)是面向对象编程(OOP)中的一个概念,指的是将数据和相关的方法(或函数)组合在一个单元中,以实现数据的隐藏和保护,同时通过公开的接口来访问和操作数据。在封装中,数据被称为对象的状态(state),而方法被称为对象的行为(behavior)。通过封装,对象的状态被保护起来,只能通过定义的公共接口(方法)来访问和修改。这种限制了直接对数据的访问,可以防止意外的错误或不合理的修改,保证了数据的一致性和完整性。

常用的封装方法就是加访问修饰符,C#中比较常用的访问修饰符包括publicprivateprotectedinternal 

继承

允许一个类(称为子类或派生类)从另一个类(称为父类、基类或超类)继承属性和方法。通过继承,子类可以获得父类的特性,包括数据成员(属性、字段)和成员方法。子类可以直接使用这些继承而来的成员,无需重新编写相同的代码。子类还可以在继承的基础上进行扩展和修改,添加新的属性和方法,或重写父类的方法以实现特定的行为。

直观点来说,继承就是子承父类,提供了代码的重用和扩展的能力,可以让我们更加灵活地创建属于子类的逻辑。

C# 中接口和抽象类的区别

C#中抽象类和接口的区别与使用 - Coding_Yong - 博客园 (cnblogs.com)

抽象程度:接口>抽象方法>虚方法 

一、抽象类:

抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

二、接口:

接口是引用类型的,类似于类,和抽象类的相似之处有三点:

  • 1、不能实例化;
  • 2、包含未实现的方法声明;
  • 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。

抽象类和接口的区别:

 

  • 1,接口可以多继承,抽象类不能
  • 2,接口可以包含方法,属性,所引起,事件的签名,但不能有实现,抽象类则可以
  • 3,接口在增加新方法后,所有的继承者都必须重构,否则编译不通过,而抽象类则可能不需要,因为可能这个方法包含了实现

使用情景:

  • 如果对象存在多个功能相近且关系紧密的版本,则使用抽象类
  • 如果对象关系不密切,但是有若干功能相同的声明,则使用接口
  • 抽象类适合于提供丰富功能的场合,接口则更倾向于提供单一的一组功能

http://www.lryc.cn/news/329579.html

相关文章:

  • 科创新格局·共赢双循环“2024上海智能科技与创新展览会”
  • Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP
  • 基于CNN-RNN的动态手势识别系统实现与解析
  • 华为鲲鹏认证考试内容有哪些
  • Gitlab CI---could not read username for xxx: no such device or address
  • 三个AI创业方向各有特点和市场潜力
  • C语言学习笔记二
  • Sublime Text4 4169 安装激活【亲测可用】
  • 【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)
  • [蓝桥杯 2019 省赛 AB] 完全二叉树的权值
  • 亮数据Bright Data,引领高效数据采集新体验
  • C#学习笔记
  • 【A-006】基于SSH的新闻发布系统(含论文)
  • c语言-static
  • zuul的性能调优
  • C++中的动态内存管理
  • es6的核心语法
  • Unity | 射线检测及EventSystem总结
  • 职业经验 2024 年测试求职手册
  • Spring Boot与Redis深度整合:实战指南
  • 微服务(基础篇-006-Docker安装-CentOS7)
  • 前端-css-01
  • Java学习36-Java 多线程安全:懒汉式和饿汉式
  • sql常用之CASE WHEN THEN
  • 【PduR路由】IPduM模块详细介绍
  • 【MySQL】6.MySQL主从复制和读写分离
  • Lucene及概念介绍
  • 密码算法概论
  • 实时数仓之实时数仓架构(Hudi)
  • 2022-04-15_for循环等_作业