CS3L8——静态成员
CS3L8——静态成员
本章代码关键字
12static //用static修饰的成员为静态成员,静态成员在程序开始时就会被分配内存空间,直到程序运行结束才会被释放,可以直接点出使用const //可以理解为特殊的static,相比static,它必须初始化,也不可改变
静态成员
静态关键字 static,用 static 修饰的 成员变量、方法、属性等,称为静态成员
静态成员的特点是:直接用 类名.静态成员 就可以使用
静态成员在程序开始时就会被分配内存空间,直到程序运行结束才会被释放
注意:静态函数中不能直接使用非静态成员,非静态函数中可以直接使用静态成员
const(常量)可以理解为特殊的 static(静态)
静态关键字 static 还可以修饰类和构造函数,详见:CS3L9——静态类和静态构造函数
早已出现的静态成员
类似于 Console.WriteLine() 这些函数都是早已出现并被我们使用的静态函数
自定义静态成员
1234567891011121314151617class Test{ public s ...
CS3L7——索引器
CS3L7——索引器
本章代码关键字
123get //索引器中接收值时会执行的关键字set //索引器中被修改值时会执行的关键字value //索引器中set代码块中传入的修改的值
索引器
让对象可以像数组一样通过索引访问其中元素,使程序看起来更直观,更容易编写
可以让我们以中括号的形式范围自定义类中的元素,规则自己规定实现,访问时和数组一样
比较适用于在类中有数组变量时使用,可以方便的访问和逻辑处理
索引器语法
索引器的声明和属性很像
123456访问修饰符 返回值 this[参数类型 参数名, 参数类型 参数名...]{ 内部写法和规则与属性相同 get { return ... } set { ... = value }}
语法示例:
索引器内部可以写逻辑,其类似于属性,分别在 get 和 set 内实现逻辑
12345678910111213141516171819202122232425262728293031323334353637383940class P ...
CS3L6——成员属性
CS3L6——成员属性
本章代码关键字
123get //属性中接收值时会执行的关键字set //属性中被修改值时会执行的关键字value //属性中set代码块中传入的修改的值
成员属性
属性是 C# 非常好用的语言功能,实际开发中强烈建议使用 公开成员属性 + 私有成员变量 来代替 公开成员变量
因为相比起直接使用公开成员变量,属性具有灵活性,在后续开发可以很方便地对属性读写添加或修改额外逻辑,并提高安全性
成员属性 一般是用来保护成员变量的,成员属性和使用和变量一样 外部用 对象.属性 调用
get 中需要 return 内容;set 中用 value 表示传入的内容
get 和 set 语句块内可以加逻辑处理,get和set可以加访问修饰符,但是要按照一定的规则进行添加
get 和 set 可以只有一个
自动属性是属性语句块中只有 get 和 set,一般用于 外部不能改能得 的情况
属性用于保护成员变量,为成员变量的获取和赋值添加逻辑处理(例如加密等),解决访问修饰符的局限性
public —— 内外访问 ...
CS3L5——构造函数、析构函数和垃圾回收
CS3L5——构造函数、析构函数和垃圾回收
本章代码关键字
123this //this代表类自己,可以显式的指定指明自己的成员~类名() //析构函数,对象被销毁释放时调用,不常用GC.Collect(); //主动触发GC的方法,但是不会频繁使用,因为性能消耗较大,可能会卡顿
构造函数
在实例化对象时,会调用的用于初始化的函数,主要就是用来初始化成员变量,如果不写则默认存在一个无参构造函数
构造函数的声明和使用
没有返回值,函数名与类名相同,没有特殊需求时一般都是 public 的
类中允许自己申明无参构造函数的,但是结构体不允许
1234567891011class Person{ public string name; public int age; public Person() { name = "liuqi"; age = 18; }}
在 new 对象时,就会调用构造函数
123456789101112 ...
CS3L4——成员方法
CS3L4——成员方法
成员方法
成员方法(函数)来表现对象的行为
申明在类语句块中
用来描述对象的行为
规则与函数申明规则相同
受到访问修饰符规则影响
返回值参数不做限制
方法数量不做限制
注意:
成员方法不要加 static 关键字(讲到 静态方法 时会解释 static 到底有什么作用)
成员方法 必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
成员方法 会受到成员修饰符的影响
成员方法的声明
C# 无所谓成员方法和成员变量的声明顺序,一般是变量声明在方法前边
成员方法上边可以添加三杠注释,外部使用成员方法时,使用鼠标指向方法可以显示注释内容
1234567891011121314151617181920212223class Person{ public string name; public int age; /// <summary> /// 说话的行为 /// </summary> /// <param name="str">说话的内容&l ...
CS3L3——成员变量和访问修饰符
CS3L3——成员变量和访问修饰符
本章代码关键字
123public //公共的 自己(内部)和别人(外部)都能访问和使用private //私有的 自己(内部)才能访问和使用protected //保护的 自己(内部)和子类(继承)才能访问和使用
成员变量
成员变量申明在类语句块中,用来描述对象的特征,成员变量可以是任意变量类型,数量不做限制
修饰类成员的访问修饰符
我们在 结构体 已经接触了访问修饰符,在这里修饰类成员变量和方法,它决定了成员变量或者方法是否能被外部使用
public —— 公共的 自己(内部)和别人(外部)都能访问和使用
private —— 私有的 自己(内部)才能访问和使用 不写访问修饰符就默认 private
protected —— 保护的 自己(内部)和子类(继承)才能访问和使用,这个访问修饰符在讲到 继承 时会展现作用
目前它们决定类内部的成员 的 访问权限
这里是修饰类的成员的访问修饰符,对于修饰类的访问修饰符详见 CS3L22——命名空间 的:((20240904193522-f3rq819 ‘ ...
MIL10——模拟面试题
MIL10——模拟面试题
问题
C#
内存中,堆和栈的区别是什么?
TCP协议和UDP协议的区别
TCP协议的可靠性是如何达到的?
内存抖动指什么?如何避免内存抖动
buff 系统中,如何用一个 byte,记录多种 buff 状态标识
Unity
Unity中使用的是左手还是右手坐标系?我们需要注意什么?
Unity中鼠标、键盘、触屏、手柄等输入事件会在 Update 之前、还是之后、还是同时执行?
Unity中场景中一个处于激活状态的物体(场景上只有这一个物体),不能被摄像机渲染出来,可能有几种情况?(至少说出3种可能的情况)
Unity制作物理游戏相关功能时,我们采用哪种方式处理位移?为什么?
Unity热更新解决方案中,Lua 和 ILRuntime 方案的本质是什么?
答案
C#
内存中,堆和栈的区别是什么?
答案:
堆和栈是操作系统堆进程占用的内存空间的两种管理方式
栈:由操作系统自动分配释放,存放函数的参数值,局部变量值,栈中数据的生命周期随着函数的执行完成而结束
堆:一般由程序员分配释放,如果开发人员不释放,程序结束时由操作系统回收
(在 C# 中 托管 ...
CS3L2——类和对象
CS3L2——类和对象
本章代码关键字
12class //类声明关键字new //实例化关键字
类
具有相同特征,相同行为的一类事物的抽象,类是对象的模板,可以通过类来创造对象
何为抽象
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
例如:从众多的人中抽取出:姓名、肤色、国籍、性别、年龄、身高、体重等等的共同的特征
类的关键词是 class
类的申明 和 类对象的申明是两个概念
类的声明 是申明对象的模板 用来抽象(形容)显示事物的
类对象的申明 是用来表示现实中的对象个体的
类是一个自定义的变量类型,实例化一个类对象是申明变量
类与结构体的区别,详见:CS3L26——结构体和类的区别
类声明在哪里以及声明语法
类 class 申明在 namespace 内
1234567891011121314namespace lesson1类和对象{ class 类名 //可加访问修饰符 { //特征——成员变量 //行为——成员方法 / ...
CS3L1——面向对象的概念
CS3L1——面向对象的概念
面向过程编程
面向过程编程是一种以过程为中心的编程思想,分析出解决问题所需要的步骤,
然后用函数把步骤一步一步实现,使用的时候一个一个依次调用
面向对象编程
面向对象是一种对现实世界理解和抽象的编程方法
把相关的数据和方法组织为一个整体来看待,从更高的层次来进行程序开发,更贴近事物的自然运行模式
简单来说就是:万物皆对象,用程序来抽象(形容)对象,用面向对象的思想来编程
例如,一个人即可抽象为一个包含:姓名、肤色、国籍、性别、年龄、身高、体重等等的对象
套路:用中文去形容一类对象,把一类对象的共同点提取出来,然后用程序语言把它翻译过来,带着对象的概念在程序中使用它们
面向对象编程是最核心的知识点都是基于面向对象编程思想来制作的
毫不夸张的说,学好了面向对象编程。你可以做任何事!
游戏,软件,网站等等应用层面上的程序,都是基于面向对象编程思想来制作的
为何要学习面向对象编程
提高代码复用率
提高开发效率
提高程序可拓展性
清晰的逻辑关系
如何学习面向对象
面向对象的关键知识是:类(class 关键字)
类 class 可以封装一系列的成员变量,成员方 ...
CS2L13——选择排序
CS2L13——选择排序
选择排序
选择排序(selection sort)的工作原理非常简单:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。
设数组的长度为 nnn,选择排序的步骤为:
初始状态下,所有元素未排序,即未排序(索引)区间为 [0,n−1][0,n−1][0,n−1] 。
选取区间 [0,n−1][0,n−1][0,n−1] 中的最小元素,将其与索引 0 处的元素交换。完成后,数组前 1 个元素已排序。
选取区间 [1,n−1][1,n−1][1,n−1] 中的最小元素,将其与索引 1 处的元素交换。完成后,数组前 2 个元素已排序。
以此类推。经过 n−1n−1n−1 轮选择与交换后,数组前 n−1n−1n−1 个元素已排序。
仅剩的一个元素必定是最大元素,无须排序,因此数组排序完成。
步骤简记为:新建中间变量、依次比较、找出极值(最大或最小)、放入目标位置、比较 n 轮
选择排序的实现
123456789101112131415161718192021222324252627282930313233343536static void Se ...