类型推断和var 关键字
● 可以使用关键字 var, 来表示任何可以从初始化语句的右边推断出的类型,(类似于C++11 中的auto 语句)。
使用var关键字注意的有:
只能用于本地变量,不能用于数据成员的声明,和成员函数的声明。
只能在变量声明中包含初始化时使用。
一旦编译器推断出变量的类型,它就是固定且不能更改的。
namespace Ch05Ex03
{
class Program
{
public var mydad(int o); //错误
public var mydd=19; //错误
static void Main(string[] args)
{
var ival = 15;
ival = 17;
var jiji; //错误
WriteLine(ival);
ReadKey();
}
}
}
● 在C和C++中,可以声明一个本地变量,然后在嵌套块中声明另一个相同名称的本地变量。在内部范围,内部的名称隐藏了外部的名称。
在C#中不管嵌套级别如何,都不能在第一个名称的有效范围内声明另一个同名的本地变量。
值参数
● 使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。 在方法调用时,系统做如下操作:
在栈中为形参分配空间。
将实参的值复制给形参。
● 值参数的实参不一定是变量,也可以是任何能计算成相应数据类型的表达式。
● 注意: 在把变量用作实参之前 ,变量必须被赋值(除非是输出参数),对于引用类型,变量可以设置为一个实际的引用或者null.
● 注意:值类型就是指类型本身包含其值。 值参数是把实参的值复制给形参。
●注意: 如果实参是引用类型的,并且使用值传递,当函数调用时, 引用被复制,结果实参和形参都引用堆中的同一个对象。
引用参数
● 使用引用参数时, 必须在函数的声明中和调用中都使用ref。
● 实参必须是变量,在用作实参前该变量必须被赋值。 如果该实参是引用类型变量, 可以赋值为一个引用 或者 null。
● 对于值传递,系统在栈上为形参分配内存,引用参数具有以下特征:
不会在栈上分配内存
实际情况是,形参的参数名将作为实参变量的别名,指向相同的位置。
引用类型作为值参数和引用参数
● 对于一个引用类型对象,不管是将其作为值参数传递还是作为引用参数传递,我们都可以在方法成员内部修改它的值。
不过它们还是有区别的的: