using
System;namespace
方法的参数传递机制{ class
Method { // 值参数(Value Parameter):方法名称(参数类型 参数名称 [,参数类型 参数名称]) // 引用参数(Reference Parameter):方法名称(ref 参数类型 参数名称 [,ref 参数类型 参数名称]) // 输出参数(Output Parameter):方法名称(out 参数类型 参数名称 [,out 参数类型 参数名称]) // 字符串在创建后就不能改变,但我们对其进行操作改变时,我们实际上操作的是它的一个副本,若要直接操纵它可以使用ref或out关键字 // string和数组都是引用类型的变量 // 值参数 public
static void
ValueMethod(int
i) { i++; } // 引用参数(ref):ref在使用前需要先初始化变量的值,在方法体外先初始化。 public
static void
RefMethod(ref
int i) { i++; } // 输出参数(out):out参数必须在方法体内初始化 public
static void
OutMethod(out
int i) { i = 0; i++; } // 可变参数params, params后面必须跟数组,之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字 static
int addi(params
int[] values) { int
sum = 0; foreach(int
i in
values) { sum = sum + i; } return
sum; } // 主函数 static
void Main() { // 值参数 int
i = 0;// 这里声明变量 i ,那么在内存堆栈中就为i开了一个新的空间并存放它 ValueMethod(i);
// 执行函数后,ValueMethod中的 i 被加1,这里的参数 i 只是上面声明的变量 i 的一个拷贝,执行后,原始变量 i 没有改变 Console.WriteLine("i="
+ i);// 结果:i=0,说明这里的 i 和ValueMethod()函数里的 i 不是同一个 i //============================================================ // 引用参数ref int
j = 0; // ref 在使用前需要初始化变量的值。 RefMethod(ref
j);// ★ ref 相当于声明了一个指针,直接指向变量j,并操纵它,内存中j只有一个,未发生拷贝 Console.WriteLine("j="
+ j);// 结果:j=1,说明第一个j也变成了1,即内存中最原先的变量j的值变成了1 //============================================================ // 输出参数out int
k; // 在这里不能对k初始化,如int k=0是不行的 OutMethod(out
k); // ★ out 和引用参数类型ref一样,操作的也只有一块内存地址 Console.WriteLine("k="
+ k); // 结果:k=1,这里说明用ref参数和用out参数得到的结果是一样的 //★ ref和out雷同,主要的区别在于谁负责初始化 // ref 参数必须在使用前先初始化,也就是在方法体外初始化 // out 参数必须在方法体内初始化 //============================================================== // 可变参数 // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数 int[] arr =
new int[3] { 1, 2, 3 }; Console.WriteLine(addi(arr)); // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数 Console.WriteLine(addi(1, 2, 3)); Console.ReadKey(); } }}另:C# 的数据类型有两种:
一种是值类型(value type),一种是引用类型(reference type)。
值类型包括:结构体(数值类型,bool,用户自定义结构体)、枚举和可空类型。
引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
值类型和引用类型的区别在于:函数参数传递的时候,值类型把自已的值复制一份传递给别的函数操作,也就是说无论函数的值怎么改变,其本身的值都不会受到影响。而引用类型则是把自己的地址传递给别的函数,操作的是他本身的值,所以当传递的值改变时,其本身的值也跟着改变。
本文详细介绍了C#中方法参数的传递方式,包括值参数、引用参数(ref)、输出参数(out)及可变参数(params)的特点与使用方法,并对比了值类型与引用类型的差异。
461

被折叠的 条评论
为什么被折叠?



