C#重启 --- 类和对象

news2025/7/16 7:10:14

​​​​​​

1.类是抽象的,对象是具体的

2.类中有数据成员和方法成员(数据成员是名词性的,方法成员是动词性的)

1.类的关键字是class

(变量:首字母小写,方法:首字母大写,类名:首字母大写)

2.类成员包含方法成员和数据成员

3.在创建一个新的类前都需要先创建一个C#源文件来容纳这个类

4.枚举是值数据类型,类是引用数据类型

数据成员的三种级别: protect,private,public

1.在C#中,如果我们没有在数据成员前面规定访问权限的话,则默认这个数据成员的访问权限为private

2.在Unity开发中,规定每一个数据成员前面都必须写上访问权限,方便代码的阅读(哪怕是private也不能省略,必须写上)

1.方法成员的返回类型前面也需要写上对应的访问权限

2.在方法中我们可以通过 this + 点操作符 + 数据成员名的方式访问和修改调用方法的对象的对应的数据成员

 

1.第一步:在栈区中声明类型的引用(用于接收堆区地址)

2.第二步:在堆区中实例化对象(根据类给定的数据成员开辟内存空间),并将地址返回给我们在栈区中声明的引用

(在我们实例化了一个对象后,在堆区中开辟的内存空间大小由对象所对应的类中有那些数据成员来决定)

1.在栈区中我们创建类型的引用,用来指向堆区中实例化的对象(接收内存地址),在堆区为对象开辟的内存空间中会具有它所对应的类型中所有数据成员的拷贝

在堆区中实例化的对象内存空间(由三部分组成:根据类型拷贝过来的数据成员,类型对象指针(我们用不到,C#内部自己调用),同步块索引(以后讲同步操作的时候才会用到))

1.可以与局部变量重名的意思是类中的成员变量能够与在方法中创建的局部变量重名

 当发生重名情况时,有以下几点需要我们注意:

1.如果方法中没有与成员变量重名的局部变量时,我们通过变量名访问和操作到的就是成员变量

2.当方法中存在与成员变量重名的局部变量时,我们通过变量名访问和操作到的变量遵循就近原则,离谁近就访问谁

3.当我们通过变量名将成员变量赋值给与其重名的局部变量(或者是反过来时),我们可以通过this指针来实现区分并进行访问(this + 点操作符 + 变量名访问到的就是成员变量)

4.之所以能够重名的原因是,成员变量开辟在堆中,局部变量开辟在栈中

(关于引用类型和值类型我们需要记住的是,无论引用类型数据开辟在堆区中还是开辟在栈中,为其开辟的内存空间中存储的都是引用(地址),而值类型则是直接存储数据)


访问权限讲解

1.private访问权限 --- 被这个访问权限修饰的成员变量和成员函数只能够在类中被调用和访问,无法被外界调用和访问

2.public访问权限 ---  被这个访问权限修饰的成员变量和成员函数无论是在类外还是在类内都能被访问和操作

3.一般来说所有的成员变量都会被设置为私有权限,防止数据被意外修改,与此同时我们都会对每一个成员变量分别设置两个接口(方法) ---- 一个是接收接口,另一个是输出接口

通过接收接口(方法,通过内部调用的方式访问具有私有权限的成员变量)用户可以向成员变量数据,同时我们也可以在方法(接口)中对用户输入的数据进行各种判断,保证输入的数据的正确性

而通过输出接口我们就可以将具有私有权限的成员变量的数据进行输出了

此时问题又来了,每一次创建一个成员变量都需要配置两个接口(创建两个方法),这实在是太麻烦了,那么有没有什么能够实现一样的效果但是更方便呢?

答案是有的,这就是C#中的属性

1.首先在C#中成员变量被称为字段

1.属性的权限一般都是public --- 或者说属性就是用来给外界访问的

2.为一个已经创建好的成员变量(字段)创建属性的语法是 puclic + 成员变量的数据类型 + 成员变量名(首字母大写版本),然后就是 { } 以及里面的 get 和 set

3.属性里的 get 和 set 的本质就是我们上面创建的两个接口(方法) --- 输入接口和输出接口

gei 对应的是输出接口 ; set 对应的是输入接口

1.在属性的set中 value 用来接收用户传进来的值,并且当我们把value赋值给变量的时候就相当于我们将用户传进来的值赋值给变量了

1. 调用属性接收数据,并在属性中传给具有私有权限的成员变量

2.每一个成员变量都能够设置一个对应的属性,属性名是成员变量名的首字母大写版本(属性的创建方法在上面有)

1.使用属性的时候,如果我们在属性中没有添加 get 方法的话,则对应的具有私有属性的成员变量的数据将无法对外界进行输出,如果没有set方法的话,则是无法接收外界的输入

2.set中可以没有return,get中一定要有return,不然的话就会报错

3.在属性的get中如果返回属性自身的话会造成栈溢出

 

1.如果类中具有了构造函数的话,编译器就不会再提供默认的无参数构造函数了

2.构造函数也可以进行函数重载操作(方法名相同,参数列表不同就能够进行函数重载)

3.构造函数访问权限也可以是private,此时构造函数只能够在类内调用,不能够在类外调用,也就是说我们只能够在类内调用构造函数实例化对象(PS:由于类中已经有了构造函数了,所以不会出现默认构造函数)

1.上面这个几个引用的意思是:其下面的方法(函数)被调用了几次

2.点开这个白色的引用后就会出现一个窗口展示调用函数的所有代码所在的位置

3.构造函数的本质就是方法

4.构造函数在对象被创建的时候会自动调用,不能够手动调用

1.如果想在一个构造函数A在被自动调用的同时调用另一个构造函数B的话,我们可以通过在构造函数A的括号后加 : 再加 this + (构造函数B的形参列表)  这个语法实现

2.注意!如果采用上面这种方法的话,构造函数的执行顺序是先执行构造函数B,然后再去执行构造函数A

3.构造函数就是一个方法,但是没有返回值,而且只能自动调用(在new实例化对象的时候自动调用,我们不能够手动调用)

4.创建一个类所需要的构造函数由需求来决定 

构造函数特点总结

 

 类和对象也能够使用数组数据结构,上图就是创建一个数组,里面装的都是同一类的对象

数组的元素个数等于数组的长度,通过点操作符来调用 Lenght 属性可以访问得到元素个数12

 1.类中有字段,与字段对应的属性,构造函数以及方法

1.创建一个自动属性的时候,就相当于我们创建了一个字段以及一个get方法和set方法

这样自动属性中的get方法是固定的,我们无法改变,访问这个自动属性的时候就会调用get方法,返回对应字段中的数据

set方法也同理,会自动调用已经定好的set方法,将传过来的值赋值给value,然后再赋值给对应字段

2.一旦用户自己创建了构造函数,编译器就不会提供默认的无操作构造函数了,此时我们只能够调用自己创建的构造函数

3.每当我们在堆区中实例化一个对象的时候,都需要调用构造函数

如果我们没写的话就是调用系统提供的默认构造函数,如果我们写了的话就会调用我们写的构造函数,此时系统不会提供默认的构造函数(当然不可能调用我们没写的构造函数)

上面是数组比较麻烦的两个必须,有时候我们就是不知道数组的大小,或者是要查找的元素的下标,这就很麻烦,为了解决这个问题我们可以通过自己创建类的方式获得一个更方便的“数组类 ”


C# 泛型 集合类

 

1. List是C#提供给我们的一个类,这个类的作用是在我们输入数据类型后帮我们生成一个对应数据类型的,具有更多功能的升级版数组。

2.使用这个类的时候有一个需要特别注意的点是我们需要在泛型括号中 <> --- 也就是两个尖括号中写入我们要创建的升级版数据的数据类型

3.在这个类中提供了两种构造函数(目前已知的,肯定还有更多的),一种是无参构造函数,上图就是无参构造函数,调用这个函数的时候会创建一个具有默认元素大小空间的数组

还有一种是有参构造函数,其参数是 int 类型,用来自定义升级版数组的大小

4.通过这个类实例化的升级版数组对象中内置了很多的方法(插件)供我们使用

通过List类实例化的升级版数组对象可以通过索引 + 下标引用操作符来访问数组中对应索引的元素 

1.字典集合,其实就是键值对集合

2.使用它的语法是通过 Dictionary 关键字实例化一个对象,实例化的时候我们需要在类的后面使用泛型尖括号规定键值的数据类型和存储在集合中的元素的数据类型

(PS:new的时候也需要这么做,且键值的数据类型和元素的数据类型要和类处定义的一样)

3.存储一个元素到我们创建的字典集合对象的时候要调用Add方法,这个方法中需要我们传两个参数,一个是我们自定义的和要存储的元素绑定的键值,另一个就是我们要存储的元素了

(元素的数据类型以及键值的数据类型都在我们创建字典集合的时候就规定好了)、

4.字典集合和List集合的区别是 --- 字典集合查找的速度快,但是存储一个元素占用的空间大;

List集合的特点是存储一个元素占用的空间少,但是查找速度慢

(当我们只是单纯的存储数据,且这些数据被查找的次数小的话就使用List集合 ; 如果我们存储的数据要被频繁的查找的话,就用字典集合)

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

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

相关文章

【毕业设计】机器学习的员工离职模型研究-python

目录 前言 课题背景和意义 实现技术思路 变量分析 数据导入 构建机器学习模型 1. 1 复制数据删除不需要的变量 1.2 列变量属性分类 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设…

Charles证书安装windows11抓包 Https协议

1、Charles 的CA证书 如果需要截取分析 Https 协议相关的内容&#xff0c;那么需要安装 Charles 的 CA 证书&#xff0c;需要在 win11 电脑上安装证书。 2、证书安装路径 点击 Charles 的顶部菜单&#xff0c;选择 “Help” –> “SSL Proxying” –> “Install Charl…

Revit修改:网格角度,体量轮廓,梁随斜板

一、Revit中使幕墙系统网格改变角度 绘制幕墙系统时&#xff0c;若幕墙系统出现如下图情况&#xff1a; 若想改变该网格的角度&#xff0c;使其与该幕墙上下边界平行或垂直则选中该幕墙&#xff0c;修改属性栏的中的网格角度。如下图所示&#xff1a; 修改完所需角度后&#xf…

web网页设计期末课程大作业——汉中印象旅游景点介绍网页设计与实现19页面HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

基于FPGA的Hamiton方程--辛几何算法实现(全网唯一)

1、本文实验基于冯康院士的《哈密尔顿系统的辛几何算法》开展&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1GM0Px7SLWBWzh4sXmAdcwg 提取码&#xff1a;fmkt 2、虽然题目写的是基于FPGA的求解&#xff0c;但实际上采用的是VHLS来实现的&#xff0c;最近根本不想写v…

m基于rbf神经网络和遗传算法优化的MIMO-OFDM系统信道估计算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 MIMO-OFDM的信道估计&#xff1a;时&#xff0c;频&#xff0c;空三个域都要考虑&#xff0c;尤其是在空域&#xff0c;不同天线发射的导频序列需要相互正交&#xff0c;否则在接收端无法…

使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

学习Python要学习哪些课程?

通过学习 Python数据分析与应用课程&#xff0c;可以掌握Python进行科学计算、可视化绘图、数据处理&#xff0c;分析与建模、构建聚类、回归、分类模型的主要方法和技能&#xff0c;并为后续相关课程学习及将来从事数据分析挖掘研究、数据分析工作奠定基础。 Python数据分析与…

进程互斥以及进程互斥实现方法(包含代码)

进程互斥有关概念&#xff1a; 两种资源共享方式&#xff1a; 1.互斥共享&#xff1a;一个时间段内只允许一个进程进行访问 2.同时共享&#xff1a;一个时间段内允许多个进程进行“同时”访问 临界资源&#xff1a;一个时间段内只允许一个进程进行访问的资源 访问临界区的…

第二章 爬虫的实现原理和技术(一)

2.1 爬虫的实现原理 不同类型的爬虫,具体的实现原理也不尽相同,但是这些爬虫之间存在许多共性。下面我将以通用爬虫与聚焦爬虫为例,具体来讲解爬虫是如何来运作的。 通用爬虫的工作原理 通用爬虫是一个自动提取网页的程序,能够从Internet上下载网页,是大多的搜索引擎的…

关于FFmepg的冷知识,这一篇就够了

每一个从事音视频技术开发的工程师对FFmpeg都不会感到陌生&#xff0c;即使是刚刚踏入这个行业的初学者&#xff0c;但对他们来说这条路上好像有着一条不可逾越的鸿沟&#xff0c;“雷神”和许多大神都总结过一些FFmpeg的学习方法&#xff0c;小编在这里为大家做一个整理&#…

《恋上数据结构与算法》第1季:动态数组原理实现(图文并茂,一文带你了解ArrayList底层实现)

动态数组原理实现一、数组&#xff08;Array&#xff09;二、动态数组三、动态数组的设计四、动态数组的实现1. 添加元素2. 数组扩容3. 删除元素4. 数组缩容5. 清空元素6. 修改元素7. 查询元素8. 插入元素9. 查看元素位置10. 是否包含某个元素11. 元素的数量12. 数组是否为空13…

win11的C/C++环境配置——基于MinGW-W64 GCC-8.1.0

首先给出MinGW-W64 GCC-8.1.0的下载地址&#xff1a;MinGW8.1.0 Win11下的C/C环境配置下载MinGW-W64 GCC-8.1.0添加bin文件和include文件到path变量中测试下载MinGW-W64 GCC-8.1.0 网页截图如下&#xff1a; 可以复制下载地址到迅雷中加速&#xff0c;下载完成后的文件如下&a…

MCE | “神药”二甲双胍后,糖尿病药物研究谁将是下一个顶流?

说到糖尿病药物&#xff0c;就不得不提一嘴“神药”二甲双胍&#xff0c;但除了二甲双胍&#xff0c;抗糖尿病药物的研究难道就没有点新玩意儿&#xff1f;当然有&#xff01; 糖尿病 (Diabetes) 是一种以高血糖为特征的慢性代谢病&#xff0c;是由于胰岛素分泌缺陷或者其生物…

美团闪购:闪电仓商户如狼似虎,传统商超便利店坐享其成?

近日&#xff0c;考研网红教师张雪峰一句“外卖员这个职业5-10年内可能会消失”再度登上热搜。 其实&#xff0c;他的这个推论&#xff0c;只是看到了目前外卖骑手的保有量&#xff0c;截至2021年&#xff0c;中国外卖骑手约1300万名。并没有看到炙手可热的“即时消费”新趋势&…

【Shell 脚本速成】05、Shell 运算详解

目录 一、赋值运算 二、算术运算[四则运算] 2.1 运算符与命令 2.2 整形运算 expr 命令&#xff1a;只能做整数运算&#xff0c;格式比较古板&#xff0c;运算符号两边注意空格 let命令&#xff1a;只能做整数运算&#xff0c;且运算元素必须是变量&#xff0c;无法直接对…

MySQL窗口函教-序号函数(row_number、rank、dense_rank)

MySQL窗门函教-序号函数&#xff08;row_number、rank、dense_rank&#xff09; 前言 mysql8.0中新增窗口函数&#xff08;开窗函数&#xff09; 窗口函数和普通聚合函数的区别 ①聚合函数是将多条记录聚合为一条&#xff1b;窗口函数是每条记录都会执行&#xff0c;有几条记…

代码源每日一题div1 区间和

区间和 - 题目 - Daimayuan Online Judge 题意&#xff1a; 思路&#xff1a; 根据前缀和的性质&#xff1a;当已知的前缀和区间是整个区间的划分时&#xff0c;才能求出整个区间的和 因为如果两个区间之间有交叉&#xff0c;交叉部分的和求不出来 因此&#xff0c;如果已知…

DeFi收益来源全面概述

去中心化金融一个主要的优势就是它对所有人开放&#xff0c;任何人在任何时间、任何地点都可以参与其中。这样一来&#xff0c;作为DeFi参与者就有机会获得在传统金融领域很难获得或根本不可能获得的收益。 加密货币的特性是开源的、无需许可的&#xff0c;这将DeFi变成了一个…

【Linux】进程创建/终止/等待/替换

目录 一、子进程的创建 1、fork函数的概念 2、如何理解fork拥有两个返回值 3、fork调用失败的场景 二、进程的终止 1、main函数返回值 1.1main函数的返回值的意义 1.2将错误码转化为错误信息 1.3查看进程的退出码 2、进程退出的情况 1、进程的正常退出与异常退出 2…