一个尝试错误的人生,不但比无所事事的人生更荣耀,并且更有意义。
一、参数修饰符
1. 修饰符种类
- 无修饰符:该参数将按值进行传递,即被调用的方法收到原始数据的一份副本。(传入参数的修改不影响原参数值)
- out:输出参数由被调用的方法赋值,因此按引用传递。(相当于传递地址) out可以实现多个返回值 。
- ref:调用者赋初值,并且可以由被调用的方法可选的重新赋值,按引用传递。(ref不赋初值,也不会报错)
2. out和ref的区别
- out修饰的参数必须在方法内修改,ref可改可不改。
- out在传入参数时,是局部变量则可以不赋值。out会对其赋值。
- ref修饰的参数,在实参必须有初始值才能调用。ref不一定会赋值。
二、 可空类型(Nullable)
可空类型,?对 int、double、bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的。
1. 语法
声明一个 nullable 类型(可空类型)的语法如下:
int? i = null;
注意:
int j; //默认值0
int? j; //默认值null
2. 合并运算符(??)
Null 合并运算符用于定义可空类型和引用类型的默认值。Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null。Null 合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。
??相当于条件运算符?:
例如:
int? i = null;
double? j = 4.2;
double m;
m = i ?? 3.6;
Console.WriteLine("m的值为:{0}", m);
m = j ?? 3.6;
Console.WriteLine("m的值为:{0}", m);
Console.ReadLine();
结果为:
m = 3.6
m = 4.2
相当于:
m = (i == null) ? 3.6 : (double)j;
Console.WriteLine("m的值为:{0}", m);
Console.ReadLine();
结果为:
m = 3.6