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关键字修饰
  • 一般情况下类型不需要使用静态修饰,只有当类型中存在扩展方法时需要使用静态类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA笔记】IDEA配置本地Maven

文章目录 1 配置本地Maven1.1 Maven下载1.2 Maven安装与配置1.2.1 安装1.2.2 配置1.2.2.1 环境配置1.2.2.2 本地仓库配置 2 IDEA设置本地Maven 1 配置本地Maven 1.1 Maven下载 官网:http://maven.apache.org/下载地址:http://maven.apache.org/downloa…

浏览器如何查看http请求的报文?

HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。 它可以使浏览器更加高效,使网络传输减少。 它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示 (如文本先于图形)等。所以在node.js里…

Vertex cover preprocessing for influence maximization algorithms

Abstract 影响力最大化问题是社交网络分析中的一个基本问题,其目的是选择一小组节点作为种子集,并在特定的传播模型下最大化通过种子集传播的影响力。本文研究了独立级联模型下影响力最大化算法中执行顶点覆盖作为预处理的效果。所提出的方法从主要计算过…

网络通信加密算法有哪些及其原理

网络通信加密算法的原理 网络通信加密算法的原理可以通过两种算法来解释:对称加密算法和非对称加密算法。 对称加密算法:对称加密算法使用相同的密钥来进行加密和解密。在通信开始之前,双方需要协商一个密钥,并确保第三方无法获…

结构体成员访问操作符

1.结构体成员的直接访问: 结构体变量.成员名: 2.结构体成员的间接访问: 间接访问应用于指向结构体变量的指针:如下

Qt应用开发(安卓篇)——安卓广播机制

一、前言 在Android的开发中,我们的程序需要得到网络状态变化、电池状态、屏幕状态、电池、系统启动完成、U盘等外设接入状态、apk安装等这些信息,除了主动去找到这些节点的信息,还可以通过安卓的广播机制被动去得到。 Android广播机制包含三…

代码随想录算法训练营第九天|28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾

题目:28. 实现 strStr() 文章链接:代码随想录 视频链接:LeetCode:实现strStr 题目链接:力扣题目链接 详解:KMP:主要应用于字符串匹配,当出现字符串不匹配是,可以知道一部分之前已…

YOLOv8独家改进:block改进 | RepViTBlock和C2f进行结合实现二次创新 | CVPR2024清华RepViT

💡💡💡本文独家改进:CVPR2024 清华提出RepViT:轻量级新主干!从ViT角度重新审视移动CNN,RepViTBlock和C2f进行结合实现二次创新 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡…

数字化时代的风向标:解密Facebook的成功秘诀

在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为全球最大的社交媒体平台之一,其成功之处不言而喻。本文将深入探讨Facebook的成功秘诀,解密其在数字化时代的风向标。 用户体验至上: …

深入探讨ChatGPT:技术突破与应用前景

目录 一、ChatGPT究竟是什么? 二、ChatGPT的发展脉络 三、ChatGPT的突出优势 强大的语言生成能力 多场景适应性 多语言处理能力 广泛的应用范围 数据敏感性的重视 四、结语:ChatGPT的未来与挑战 Tips:国内的ChatGPT ⭐ 点击进入Chat…

c#——请求一个URL接口

.net 4.6环境下 .net4.6支持异步编程 命名空间&#xff1a; using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; 创建一个异步方法发送请求&#xff1a; public static async Task<string> CallWebAPIAsync(string url, strin…

什么是React属性钻取(Prop Drilling)

一、介绍 在React开发过程中&#xff0c;状态管理是一个绕不开的话题。无论是新手还是有经验的开发者&#xff0c;都会面临如何有效管理组件状态的挑战。React为我们提供了多种状态管理方案&#xff0c;如直接的状态传递&#xff08;俗称"属性钻取"&#xff09;、Co…

那些年我们在数模竞赛中踩过的坑(附避坑指南)

数乐君猜测关注我们的同学大多都已经参加过数模竞赛了&#xff0c;可能有的同学对于数模竞赛的经验已经很丰富&#xff0c;或者即将要参加第一次数模竞赛&#xff0c;但要说起曾经在数模竞赛中踩的那些坑&#xff0c;也是有苦难言&#xff0c;那或许大家会好奇&#xff0c;数模…

【神经网络 基础知识整理】前向传播 反向传播

神经网络 基础知识整理 前向传播前向传播pytorch中的forward函数 反向传播 顾名思义&#xff0c;前向传播是从前往后传播的&#xff0c;从input层到output层的方向&#xff1a;前面一层的输出传入后一层作为输入&#xff0c;再对数据进行相应的处理&#xff0c;继续传下去&…

力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

1.题目 2.知识点 注1&#xff1a; indexOf() 是 Java 中 String 类的方法之一&#xff0c;它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串&#xff0c;则返回它在字符串中的索引位置&#xff08;从0开始&#xff09;&#xff0c;如果没有找…

Qt的多线程类

主要介绍一些Qt的多线程类 QThread QThread 是 Qt 提供的基本的多线程类&#xff0c;它允许创建自定义的线程。可以继承 QThread 类&#xff0c;并重写其 run() 方法&#xff0c;在 run() 方法中编写线程要执行的代码。以下是一个简单的示例&#xff1a; #include <QThre…

03、判断和循环

三、判断与循环 文章目录 三、判断与循环顺序结构分支结构If语句在程序中就是用来判断的switch 循环结构forwhiledo while 顺序结构 顺序结构是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 分支结构 If语句在程序中就是用来判断的 …

C语言 实用调试技巧

我们的博客已经更新到了数据结构&#xff0c;但是当我在深耕数据结构时我发现我在C语言是遗漏了一个重要的东西&#xff0c;那就是C语言的使用调试技巧。这篇博客对数据结构非常重要&#xff0c;请大家耐心观看。 1. 什么是bug&#xff1f; 第一次被发现的导致计算机错误的飞蛾…

抖音小店怎么高效的对接达人?分享四年老运营的经验,可记笔记!

大家好&#xff0c;我是电商糖果 抖音现在最火的卖货方式&#xff0c;依旧是达人带货&#xff0c;也就是商家和达人合作模式。 有很多刚开店的朋友找达人合作总是失败&#xff0c;不知道什么原因。 其实找达人合作是需要技巧的&#xff0c;糖果做抖音小店已经四年了&#xf…

Vue2 基础三组件化开发

代码下载 组件 (Component) 是 Vue.js 最强大的功能之一&#xff0c;组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。 组件注册 全局注册&#xff1a; Vue.component(组件名称, {data: 组件数据,template: 组件模板内容});// 全局组件Vue.component(button-counter, …