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 Sat 10 }
1 Console.WriteLine((int)days.Mon); 2 Console.WriteLine((int)days.Sat);
打印结果为: