C# --- 结构体

 

 

1.结构体与类的第一个区别是创建的时候使用的关键字不同 --- 结构体 struct ; 类是 class

2.结构体中不能够自定义无参构造函数,因为结构体中已经隐式包含了一个无参构造函数,这个不像类中自带无参构造函数可以被我们替代,它是无法替代的

3.除了上面这两个区别外,结构体中可以有成员字段,方法,属性和自动属性(包括静态的),同时我们还可以自己添加有参构造函数

4.在结构体中调用一个自动属性前需要先将其对应的隐式字段初始化(在类中不需要),而负责初始化功能的则是构造函数,如果说我们创建结构体对象的时候使用的是其自带的无参构造函数的话,这个无参构造函数会帮我们将所有字段以及自动属性对应的隐式字段都给初始化好。

但是当我们使用的是自己写的有参构造函数的话,由于我们目前掌握的知识还不足以实现隐式字段的初始化,所以我们需要通过曲线救国的方式来完成隐式字段的初始化。

补充一个构造函数独有的特性 --- 如果想在调用一个有参构造函数时先调用一个无参构造函数的话,我们可以通过在这个构造函数的括号后面加上 :this()来实现

通过上面这个特性我们就可以通过在有参构造函数的括号后面 + this() 的方式,实现在调用有参构造函数之前先调用结构体自带的无参构造函数帮我们把隐式字段初始化好。

结构体和类的最大一个区别就是 结构体是值类型 (特殊的引用类型), 而类是引用类型

首先无论是创建结构体对象还是类对象我们都需要在栈区 / 堆区(一般默认在栈区,会因实际情况发生改动,如数组)中进行声明(创建一个指针(引用)来指向为对象开辟的内存块),然后我们开始实例化对象 --- 结构体对象的实例化(开辟内存空间)是在栈区中进行的,而类对象的实例化则是在堆区中进行的

结构体对象相对于类对象的优点是:1.占据的内存空间小 2.访问速度快

但是缺点也很明显,就是它占据的是栈区中的内存空间,而栈区中的内存空间都是非常“珍贵”的

1.在结构体中字段只能够通过构造函数来实现初始化(除非字段被const 或者是 static 修饰),不像在类中我们可以在创建字段的时候直接对齐初始化。

(被static修饰的字段会在结构体 / 类 名出现的时候一起被加载好,而被const 修饰的字段则会变为常量)

在普通类前面加上static关键字修饰就能够将普通类修饰为静态类了,静态类中只能够有静态成员 

类是一个数据类型,而类中的数据成员则是由多个数据类型组成,也就是说一个数据类型中包含多个基本数据类型,这个数据类型被我们称为复合数据类型(自定义数据类型)

我们如何调整随机的概率呢? ---  通过转换的方式来实现

假如我们想让一个数a出现的概率是10%,另一个数出现的概率是90%,我们可以转换为取随机数的方式来解决这个问题 

上面这行代码的意思是在0,9之间随机生成一个数,如果这个数等于5的话就输出4,否则输出2

而需要注意的是随机出5的概率是10%,2的概率是90%

通过这种转换的方式我们就完美的解决了规定一个数出现的概率是多少的要求(这个方法还可以进行拓展,比如出现的概率为33%,42%...等等,都可以对上面这段代码进行变形来实现 --- 生成的数是否小于等于 33,如果是的话输出4,否则输出2,此时我们就将4出现的概率控制为33%,2为67%) 

猜你喜欢

转载自blog.csdn.net/qq_51947882/article/details/128205508