1.7 C# 属性以及参数传递

时间:2022-08-29 20:27:33
day 7 属性以及参数传递
1,属性
作用:1,检验数据的合法性
2,保护内部字段不被破坏
属性的语法;
修饰符+数据类型(与字段的类型一致)+字段名(首字母大写)
{
属性内部有两个构造器
set{} 出现赋值运算的时候会调用set构造器
get{} 取值的时候会调用get构造器
注意:属性的内部至少存在一个构造器
如果只有set,没有get,该属性为只写.
如果只有get,没有set,该属性为只读.
区分调用set还是get
是否产生赋值运算是判断调用set还是get的依据
属性实际上是特殊的方法
set构造器,是有参数没有返回值的特殊方法,参数为系统关键字value
get构造器,是无参数有返回值的特殊方法,返回的是字段
需要注意的是属性不一定和字段是成对儿出现的,两者可以同时存在,
当然也可以不同时存在
}

2.参数传递(实参-->形参)
第一种情况:值传递
值类型作为实参传递给形参的时候,传递的是值得本身,而不是值得地址.
代表:int float double bool struct enum等常见值类型
第二种情况:引用传递(地址传递)
引用类型作为实参传递给形参的时候,传递的是地址.
当然这里面string是一个特殊范例,string虽然本身为引用类型,但是
作为实参传递的时候,默认是值传递
代表:数组 对象

ref指针:
作用:将值传递改为地址传递
用途:如果你想改变一个值类型本身的值,那么在传递的时候需要加上ref
如果你在参数传递的时候,仅仅是为了运算不需要改变原值,那么不需要加上ref
out关键字:
作用:将某个值保存到一个变量中
用途:保存结果,实际上相当于函数有返回值.

3.内存分布
栈:栈区存储变量,比如int a = 10;
a变量存于栈,10存在常量区.
a实际上保存的是常量区10这个值所在的首地址
堆:一般用来存放对象信息(字段,属性,方法,索引器)

4.new关键字
new 一个类实例的时候,系统会在堆区开辟新的内存空间.
new 一个结构体实例的时候,系统不会在堆区开辟新的内存空间.

结构体适合小型数据结构,就是不需要耗费内存的那种,常用来做工具使用
比如说向量(x,y,z)
类适合大型数据结构,比如玩家类,需要常驻内存.
结构体不能被继承,但是类可以.
5.内存分布图(掌握)