方法的参数传递机制:
1。值参数
2。引用参数
3。输出参数(参数在方法体内必须被初始化,在客户端参数中不用付初值)
输出参数和引用参数的区别:
从CLR(公共语言运行时)的角度来看,关键字out和关键字ref是等效的,这就是说,无论使用哪个关键字,都会生成相同的元数据和IL代码。但是,C#编译器将两个关键字区别对待,在C#中,这两个关键字的区别在于哪个方法负责初始化引用对象。如果方法的参数标记为out,那么调用者不希望在调用方法之前初始化对象,被调用的方法不能读取对象的值,而且被调用的方法必须在返回之前为对象赋值。如果方法的参数标记为ref,那么调用者必须在调用方法之前首先初始化参数的值,被调用的方法可以读取参数或参数赋值。
向方法传递可变数量的参数:
为了将方法声明为可以接受可变数量参数的方法,使用params关键字。
值类型和引用类型:
类型区分为这两大类的主要原因是在于执行性能与内存资源管理的不同。由于值类型变量直接在堆栈(stack)中存储该类型的值,此类类型在内存的使用上以及访问的效能上比引用类型更好。因为引用类型变量存放的是指向实际对象的指针,因此访问对象时必须多进行一次内存引用的操作方可获取数据。且引用类型的对象必须分配多余的内存来存放虚函数指针及线程同步块,对于内存的需求较大。而使用引用欧冠类型的优点是回收站会自动替您管理分配在托管堆(Managed Heap)当中的内存。
下面例子说明:static静态变量和动态变量的区别。
using System;
class Method
{
class A
{
public static int i = 0;
//以下代码与客户端第二个Console语句对应
public int i=0;
public void addi()
{
i = i + 1;
}
}
static void Main()
{
A a = new A();
a.addi();
A b = new A();
b.addi();
Console.WriteLine(A.i ); //静态变量 i只能由类A进行访问,而不能用实例来访问。
Console.writeLine(b.i); //动态变量i只能由实例b或a进行访问,不能用类来访问。
}
}