方法与参数修饰符
方法可以有参数,也可以有返回值。
方法可以在类或结构范围内实现(也可以在接口中定义命名),可以被各种修饰符(public、virtual、internal、new等)修饰以限定方法的行为。
方法的基本格式为:修饰符 返回值 方法名(参数){...}
C#参数修饰符
C#有一些控制参数是如何传入方法体中的关键字。即C#参数修饰符:
(无) :如果一个参数没有使用参数修饰符,则认为它是按值传递给方法体的。方法体收到原始数据的一个副本(copy)。
out:输出参数,传入的参数需要在方法体中被赋值,是按引用传递给方法体的。若在方法体中未被赋值会报编译器错误。
ref:参数按引用传递。
params:可以在一组可变数量的数组参数作为单独的逻辑参数传递给方法体。
默认的参数传递(无参数修饰符):
static int Add(int a,int b)
{
int ret=a+b;
a=10;b=20;
return ret;
}
static void Main(string[] args)
{
int a=1,b=2;
int c=Add(a,b);
Console.WriteLine("a={0};b={1}",a,b);
Console.ReadLine();
}
最后输出为:a=1;b=2
out修饰符
out修飾符的確有一個很有用的用途:通過它,調用者只使用一次方法調用就能獲得多個返回值。
static void FillValues(out int a,out string b,out bool c)
{ a=1;b="bruce wong";c=true; }
static void Main(string[] args)
{
int a;string str;bool c;
FillValues(a,b,c);
Console.WriteLine("a={0},b={0},c={0}",a,b,c);
Console.ReadLine();
}
最后结果为:a=1,b=bruce wong,c=true
注意:输出参数必须在退出方法前被赋值,否则会导致编译错误。
ref修饰符
输出参数与引用参数都是按值类型传递的,但它们是有区别的:
1.输出参数不需要在它们被传递给方法前赋值,因为方法在退出之前会给输出参数赋值。
2.引用参数必须在被传递入方法之前被赋值,因为是在传递一个已存在的变量的引用。如果不赋值,相当于对一个为赋值的局部变量进行操 作。
static void SwapStrings(ref a,ref b)
{ string temp=a; a=b; b=temp; }
static void Main(string[] args)
{ string a="First",b="Second";
SwapStrings(a,b);
Console.WriteLine("a={0},b={1}",a,b);
Console.ReadLine();
}
最后结果为:a=Second,b=First
params修饰符
params关键字可以把可变数组的参数(相同类型)作为单个逻辑参数传给方法。调用者可以传入强类型数组或以逗号分隔的项列表,以 params关键字标记的参数就可以被处理。
注意:方法只支持一个params参数,且必须位于参数列表中最后一个。
static int Average(params int[] args)
{
int sum=0;
if(args.Length==0)
return sum;
for(int i=0,i<args.Length,i++)
{
sum+=args[i];
}
return (sum/args.Length);
}
static void Main(string[] args)
{
Console.WriteLine("Average is {0}",Average(1,2,3,4,5,6,7,8,9));
int[] param={10,9,8}
Console.WriteLine("Average is {0}",Average(param));
Console.ReadLine();
}
成员重载
当定义一组名称相同的成员是,如果它们的参数数量(参数类型)不同,这样的成员就叫被重载。
static int Add(int a,int b){return a+b;}
static double Add(double a,double b){return a+b;}
static long Add(long a,long b){return a+b;}
注意:只有返回值不同是不可以重载的。