方法与参数修饰符
方法可以有参数,也可以有返回值。
方法可以在类或结构范围内实现(也可以在接口中定义命名),可以被各种修饰符(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();
}
方法重载
当定义一组名称相同的成员是,如果它们的参数数量(参数类型)不同,这样的成员就叫被重载。
int Add(int a,int b){return a+b;}
double Add(double a,double b){return a+b;}
long Add(long a,long b){return a+b;}
注意:只有返回值不同是不可以重载的。
命名参数
命名参数是把参数附上参数名称,这样在调用方法的时候不必按照原来的参数顺序填写参数,只需要对应好参数的名称也能完成方法。
class Program
{
/// <summary>
/// 可选参数 命名参数
/// </summary>
static void Main( string [] args)
{
Console.WriteLine(ShowComputer( "i3 370M" , "2G" , "320G" ));
Console.WriteLine(ShowComputer(disk: "320G" , cpu: "i3 370M" , ram: "2G" ));
Console.Read();
}
private static string ShowComputer( string cpu, string ram, string disk)
{
return "My computer ... \nCpu:" + cpu + "\nRam:" + ram + "\nDisk:" + disk + "\n" ;
}
}
|
可选参数是.NET4中新添加的功能,应用可选参数的方法在被调用的时可以选择性的添加需要的参数,而不需要的参数由参数默认值取代。
class Program
{
/// <summary>
/// 可选参数 命名参数
/// </summary>
static void Main( string [] args)
{
Console.WriteLine(ShowComputer());
Console.WriteLine(ShowComputer( "P5300" , "1G" ));
Console.Read();
}
private static string ShowComputer( string cpu = "i3 370M" , string ram = "4G" , string disk = "320G" )
{
return "My computer ... \nCpu:" + cpu + "\nRam:" + ram + "\nDisk:" + disk + "\n" ;
}
}
|