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

C#-面向对象基本概念

1. 面向对象基本概念

  • 之前所接触到的编程方式叫做面向过程
  • 面向过程和面向对象是两种不同的编程方式
  • 对比面向过程的特点,可以更好的了解什么是面向对象

1.1 过程和函数(科普)

  • 过程是早期的一个编程概念
  • 过程类似于函数,只能执行,但是没有返回值
  • 函数不仅能执行,还可以返回结果

1.2 面向过程和面向对象基本概念

1)面向过程——怎么做?

  1. 把完成某一个需求的所有步骤从头到尾逐步实现
  2. 根据开发要求,将某些功能独立的代码封装成一个又一个函数
  3. 最后完成的代码,就是顺序的调用不同的函数

特点

  1. 注重步骤与过程,不注重职责分工
  2. 如果需求复杂,代码会变得很复杂
  3. 复杂项目没有固定的套路,难度很大

2)面向对象——谁来做?

相比较函数,面向对象是更大的封装,根据职责,在一个对象中封装多个方法

  1. 在完成某一个需求前,首先确定职责,要做的事情(方法)
  2. 根据职责,确定不同的对象,在对象内部封装不同的方法(多个)
  3. 最后完成代码,就是顺序的,让不同的对象调用不同的方法

特点

  1. 注重对象和职责,不同的对象承担不同的职责
  2. 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供固定套路
  3. 需要在面向过程基础上,再学习一些面向对象的语法

2. 类和对象的概念

2.1 类

类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用

  • 特征被称为属性
  • 行为被称为方法

类就相当于制汽车的图纸,是一个模板,是负责创建对象的

2.2 对象

  • 对象是由类创造出来的一个具体存在,可以直接使用
  • 有哪一个类创造出来的对象,就拥有在哪一个类中定义的属性和方法
  • 对象就相当于是用图纸制造的汽车

2.3 类和对象的关系

  • 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象
  • 类只有一个,而对象可以有很多个,不同的对象之间属性的具体内容可能各不相同
  • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少

3. 类的设计

在使用面向对象开发前,应该首先分析需求,确定一下程序中需要包含哪些类

在程序开发中要设计一个类,通常需要满足以下3个要素:

  1. 类名:这类事物的名称,满足Pascal 规则
  2. 属性:这类事物具有什么样的特征
  3. 方法:这类事物具有什么样的行为

3.1 类名的确定

名词提炼法:分析整个业务流程出现的名词,通常就是找到的类。

3.2 属性和方法的确定

  • 对对象的特征,描述通常可以定义成属性。
  • 对象具有的行为通常可以定义为方法。注:方法,一般是动作即动词。

4. 类和对象的使用

4.1 声明类

  • 声明一个类需要使用 class 关键字
  • 类的属性及方法写在大括号中

4.2 声明属性

  • 属性在 C# 中较为独特,它既不同于方法,也不同于字段。
  • 属性使用Pascal规则命名。
  • 属性最常用的书写方法:public int Age{get;set;}
  • 如果属性中具有 get 关键字,说明可以获取该属性的值
  • 如果属性中具有 set 关键字,说明可以向该属性设置

4.3 声明方法

同函数声明

4.4 实例化

  • 类使用关键字 new 实例化对象
  • 一个类可以实例化多个对象
  • 对象可以使用类定义的属性和方法

4.5 访问修饰符

  • public:共有的 所有的类都可以访问
  • private:私有的 当前类内部可访问
  • protected:受保护的 当前类以及继承它的子类可访问
  • internal:内部的 只限于本项目内访问,其他的不能访问
  • protected internal:内部保护访问 只能是本项目内部或子类访问 其他类不能访问

访问级别约束:

  • 父类子类访问修饰符要保持一致
  • 方法的访问修饰符要和方法参数的访问修饰符保持一致

注意:类的访问级别默认internal,要加上public才能让外部访问。

静态方法、属性

  • 静态方法和属性通过static关键字修饰
  • 静态方法和属性通过类型直接获取,非静态则必须通过实例化的对象获取
  • 静态方法只能使用静态属性

静态类

  • 静态类通过static关键字修饰
  • 一般情况下类型不需要使用静态修饰,只有当类型中存在扩展方法时需要使用静态类

相关文章:

  • C语言课后作业 20 题+考研上机应用题
  • Python爬虫获取接口数据
  • STM32CubeIDE基础学习-EXTI外部中断实验
  • 如何在代理的IP被封后立刻换下一个IP继续任务
  • 稳定出刊检索:2024年财务会计与法律金融国际学术会议(ICFALF 2024)
  • 深入浅出前端本地储存(1)
  • 数据结构的概念大合集04(队列)
  • Go——切片
  • C语言之快速排序
  • 蓝桥杯之动态规划冲刺
  • matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面
  • ArrayList和LinkedList区别
  • GPT-4引领AI新纪元,Claude3、Gemini、Sora能否跟上步伐?
  • 十四、GPT
  • Spring Security AuthenticatedVoter 错误访问控制漏洞复现(CVE-2024-22257)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Meteor的表单提交:Form
  • Redis在Web项目中的应用与实践
  • spring security oauth2 password授权模式
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 前端之Sass/Scss实战笔记
  • 如何在GitHub上创建个人博客
  • 微服务核心架构梳理
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #Linux(权限管理)
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $jQuery 重写Alert样式方法
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (一)80c52学习之旅-起始篇
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)jdk与jre的区别
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • . NET自动找可写目录
  • .“空心村”成因分析及解决对策122344
  • .Net 6.0 处理跨域的方式
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET开发者必备的11款免费工具
  • .net快速开发框架源码分享
  • @DataRedisTest测试redis从未如此丝滑
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [Flutter]打包IPA
  • [FZSZOJ 1223] 上海红茶馆
  • [hdu 1247]Hat’s Words [Trie 图]
  • [HJ73 计算日期到天数转换]
  • [java后端研发]——文件上传与下载(2种方式)
  • [LeetCode] 596:超过5名学生的课
  • [Linux] MySQL数据库之索引
  • [NAND Flash 7.1] 闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?
  • [noip模拟]计蒜姬BFS