一,方法的参数
1,值传递
①,形参分配了一个新的存储空间。所有值参数可以带进,不可以带出。
②,声明时没有任何修饰符。
void swap(int x,int y){};
2,引用传递ref
①,采用ref修饰。值可以带进,也可以带出。
②,实参在传值之前必须赋初值,否则会报错。
③,实参和形参指向相同的地址空间。
代码
public static void swap(ref int x, ref int y)
{
int c = x;
x = y;
y = c;
}
static void Main(string[] args)
{
int i = 10;
int j = 20;
swap(ref i, ref j);
Console.Write("i={0},J={1}", i, j);
}
3,输出参数out
①,采用out修饰,值可以带进,也可以带出。
②,可以不赋初值,即便是赋初值,在方法中还是没有用的,只有在方法中赋值才可以。
③,和ref一样,不会创建新的存储空间,和实参指向相同的地址空间。
public static void swap(out int x, out int y) { //int c = x; //error no orignal value //x = y; //y = c; x = 10; y = 20; int c = x; x = y; y = c; } static void Main(string[] args) { int i = 10;//invalidation int j = 20;//invalidation swap(out i, out j); Console.Write("i={0},J={1}", i, j); } 四,参数数组params
1,不可以与out,ref连用。
2,参数只可以是一维数组,不可以是二维数组。如string []. 不可以是string [,];
3,参数数组可以指0个或者多个参数。
代码static void Print(params int [] args)
{
int length = args.Length;
for (int i = 0; i < length; i++)
{
Console.Write("第{0}个参数值为:{1}\n",i,args[i]);
}
}
static void Main(string[] args)
{
int [] array = { 1, 2, 3, 4 };
Console.Write("第一组数据:\n");
Print((int [])array);
Console.Write("第二组数据:\n");
Print(10, 20, 30, 40);
}五,数组参数
1,数组作为值传入,如果改变数组元素的值,则可以传出;如果改变数组对象的值,数组元素的值不会被传出。
2,数组作为引用参数传入,使用ref。则在传入之前必须创建数组对象。值可以传出。
3,数组作为输出参数传入,使用out。在传入之前可以创建数组,也可以不创建数组。创建数组也没有用,需要在函数内创建。值可以传出。
代码
//数组元素改变,可以传出。
static void swap(int[] a, int[] b)
{
int c = a[0];
a[0] = b[0];
b[0] = c;
}
//数组对象改变,不可以传出。
static void swap(int[] a, int[] b)
{
int[] c = a;
a = b;
b = c;
}
//引用参数,可以传出
static void swap(ref int[] a,ref int[] b)
{
int[] c = a;
a = b;
b = c;
}
static void Main(string[] args)
{
int[] a = { 0 };
int[] b = { 12 };
Console.Write("before:a[0]={0},b[0]={1}\n", a[0], b[0]);
swap( out a,out b);
Console.Write("after:a[0]={0},b[0]={1}\n", a[0], b[0]);
Console.Read();
}
六,方法的重载
1,方法的重载有叫方法的签名。可以是参数的顺序,类型,个数的不同,但是返回值是不包括在内。如下定义是错的:(只有返回值类型不一样)
代码
static void swap(int[] a, int[] b)
{
int c = a[0];
a[0] = b[0];
b[0] = c;
}
//数组对象改变,不可以传出。
static int swap(int [] a, int[] b)
{
int[] c = a;
a = b;
b = c;
return 0;
}
2,除方法外,还可以对构造函数,索引器,运算符进行重载。