csyx:csyx2.8-变量和参数

变量

1.本地变量

2.参数

3.字段

4.数组元素

 

stack存储本地变量和参数

heap存储对象/引用类型的实例

Gc垃圾收集器自动释放heap上的不被引用的实例

值类型的实例和对象的引用会存放在变量声明时所在的内存块里

引用类型的字段和数组元素存放在heap上

static字段在heap上

其他在heap上的对象当没有被引用时会逐渐的被Gc回收

而static字段会存活到应用程序停止

变量

1.本地变量

2.参数

3.字段

4.数组元素

-

本地变量在读取之前必须被赋值

当方法被调用的时候,函数的参数必须被赋值

其他的变量(字段,数组元素)在运行时会被自动初始化

所有类型的实例都有默认值

引用类型-null

值类型和枚举类型-0

char-'\0'

bool=false

可以通过default关键字来获取任何类型的默认值

自定义值类型struct的默认值就是该自定义类型定义的每个字段的默认值

struct

形参-parameters

实参-arguments

函数传参

传值-无修饰符-传递前变量必须被明确赋值

传引用-ref-传递前变量必须被明确赋值

传输出-out-变量在方法结束的时候必须被明确赋值

 

默认传参方式-传值-形参是实参的一份临时拷贝

传值-值类型

传值-引用类型,不创建新对象

复制的是引用不是对象

传引用

传引用-值类型

传输出

传输出和引用区别:

out进入函数前不需要被赋值,离开函数前必须被赋值

out通常用来从方法返回多个值

string-引用类型

传输出-引用类型,不创建新对象

C#7-调用方法时,可以使用out声明临时变量

当调用的方法有多个out参数时,如果不需要其中一些out参数,可以使用_来弃用discard

ref/out都相当于传引用

传引用相当于给现有变量的存储位置起别名,而不是创建了1个新的存储位置

数组参数

方法的最后1个参数

参数类型必须为数组

可以接收任意数量的该类型的参数

两种调用方式

1.没加params

2.加了params

方法体内直接放置数组元素-(数组元素)

可选参数

可选参数需要在声明的时候提供默认值

按顺序赋值

往public方法里添加可选参数,若该方法被其他装配集调用,那么两个装配集都需要重新编译

可选参数的默认值必须是常量表达式或者拥有无参构造函数的值类型

可选参数不能使用ref和out

 

方法声明和方法调用时,必填参数必须在可选参数前面

但是params参数仍然在最后面

也就是说可选参数后面只能是params参数

 

可以混合使用可选参数和命名参数

 

 

 

 可以混合使用按位参数和命名参数

 

 

ref Locals就是对数组元素的引用,修改ref Locals就是修改数组元素

ref Local的目标必须是数组元素,字段,本地变量;不能是属性;

 

 ref local和ref return联合使用,常用于微优化场景

 

 

var自动类型推导

类似cpp11的auto关键字

 

 

相关推荐

相关文章