C#编程语言(四):方法

方法与参数修饰符

方法可以有参数,也可以有返回值。

方法可以在类或结构范围内实现(也可以在接口中定义命名),可以被各种修饰符(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;}

注意:只有返回值不同是不可以重载的。

posted @ 2011-02-28 15:06 黄宝强 阅读(...) 评论(...) 编辑 收藏