首页 > 代码库 > 2014.8.30.ref,out,params,enum,递归

2014.8.30.ref,out,params,enum,递归

(一)ref

函数形参变量的输入有两种方式:传值,传址。而ref则为传址。eg:

 1 static int Add(ref int n) 2 { 3     Console.WriteLine("Add----1:{0}",n); 4     n = n + 10; 5     Console.WriteLine("Add----2:{0}",n); 6     return n; 7 } 8 static void Main(string[] args) 9 {10     int a = 5;11     Console.WriteLine("Main----1:{0}",a);12     Add(ref a);//执行函数Add后,并没有把a的值更新,但加上ref则把a在内存中的地址也传给函数了,相应的a指向的地址也就随之改变了。a = Add(a);13     Console.WriteLine("Main----2:{0}",a);14     Console.ReadKey();15 }

打印结果为:

(二)out

out顾名思义,即输出。相当于一个函数可以有多个返回值,这是C#中特有的。

 1 static int Add(int n,out int x) 2 { 3     Console.WriteLine("Add----1:{0}",n); 4     n = n + 10; 5     x = 33; 6     Console.WriteLine("Add----2:{0}",n); 7     return n; 8 } 9 static void Main(string[] args)10 {11     int a = 5;12     int x;13     Console.WriteLine("Main----1:{0}",a);14     a=Add(a,out x);15     Console.WriteLine("Main----2:{0},{1}",a,x);//x相当于第二个返回值,它的值也改变了,至少目前我是这么理解的16     Console.ReadKey();17 }

打印结果为:

(三)params

在数组形参前面使用,可以赋多个值。eg:

 1 static void PaiXu(params int[] nums) 2 { 3     for (int i = 1; i < nums.Length - 1; i++) 4     { 5 for (int j = 1; j <= nums.Length - i; j++) 6 { 7     if (nums[j] > nums[j - 1]) 8     { 9 int temp = nums[j];10 nums[j] = nums[j - 1];11 nums[j - 1] = temp;12     }13 }14     }15     for (int i = 0; i < nums.Length; i++)16     {17 Console.Write(nums[i]);18     }19 }20 21 PaiXu(3, 5, 7, 2, 1, 8);//调用的时候可以赋任意多个值了

(四)enum 枚举

枚举是由程序员定义的类型,与类或结构一样。

 *与结构一样,枚举是值类型,因此直接存储它们的数据,而不是分开存储成引用和数据。
*枚举只有一种类型的成员:命名的整数值常量。
eg:
 1 enum days 2 { 3     Sun = 1, 4     Mon, 5     Tue, 6     Wed, 7     Tur, 8     Fri=15, 9     Sat10 }
1 Console.WriteLine((int)days.Mon);2 Console.WriteLine((int)days.Sat);

打印结果为:

2014.8.30.ref,out,params,enum,递归