方法之所以存在就是为了被调用!使用方法名来调用一个方法,要求它执行它的任务。如果方法要获取信息(由它的参数指定),就必须提供它需要的信息。如果方法要返回信息(由它的返回类型指定),就应该以某种方式来捕捉这个信息。
指定方法调用语法
为了调用一个c#方法,需要采用如下语法形式:
methodname (argumentlist)
methodname(方法名)必须与调用的那个方法的名称完全一致。记住,c#语言是区分大小写的。
argumentlist(参数列表)用于提供将由方法接收的可选信息。必须为每个参数(形参)提供一个参数值(实参),而且每个参数值都必须兼容于它对应的形参的类型。如果方法有两个或者更多的参数,那么在提供参数值时,必须使用逗号来分隔不同的参数。
重要提示每个方法调用中都必须包含一对圆括号,即使调用一个无参数的方法。
下面再次列出了addvalues方法:
int addvalues(int lefthandside, int righthandside)
{
// ...
}
addvalues方法有两个int参数,所以在调用该方法时,必须提供两个以逗号分隔的int实参:
addvalues(39, 3); // 正确方式
还可以将直接量39和3替换成int变量的名称。这些变量的值会作为参数值传递给方法,例如:
int arg1 = 99;
int arg2 = 1;
addvalues(arg1, arg2);
下面列出了一些不正确的addvalues调用方式:
addvalues; // 编译时错误,无圆括号
addvalues(); // 编译时错误,无足够实参
addvalues(39); // 编译时错误,无足够实参
addvalues("39", "3"); // 编译时错误,类型错误
addvalues方法将返回一个int值。这个int值可以在能够使用一个int值的任何地方使用。例如:
result = addvalues(39, 3); // 作为赋值操作符的右操作数
showresult(addvalues(39, 3)); // 作为另一个方法调用的实参
在下面的练习中,我们将继续使用mathsoperators应用程序。这一次,我们将研究一些方法调用。
研究方法调用
1.返回methods项目。如果是刚完成上一个练习,该项目应该已经在visual studio 2005中打开;否则,请从my documents文件夹的/microsoft press/visual csharp step by step/chapter 3/methods子文件夹中打开它。
2.在“代码和文本编辑器”窗口中显示form1.cs的代码。
3.找到calculate_click方法,观察该方法在try语句和起始大括号之后的前两个语句。
这两个语句是:
int lefthandside = system.int32.parse(lefthandsideoperand.text);
int righthandside = system.int32.parse(righthandsideoperand.text);
这两个语句声明了两个int变量,分别叫lefthandside和righthandside。然而,最有趣的地方是变量的初始化方式。在两个语句中,都调用了system.int32类的parse方法(system是一个命名空间,int32是该命名空间中的一个类的名称)。parse方法要求获取一个字符串参数,并能把它转换成一个int值。执行了这两个语句之后,用户在窗体上的lefthandsideoperand和righthandsideoperand文本框中输入的任何内容都会转换成int值。
4.观察calculate_click方法的第4个语句(在if语句和另一个起始大括号之后):
calculatedvalue = addvalues(lefthandside, righthandside));
该语句调用addvalues方法,将lefthandside 和righthandside变量的值作为方法的实参来传递。addvalues方法的返回值将存储到calculatedvalue变量中。
5.继续观察下一个语句:
showresult(calculatedvalue);
该语句调用showresult方法,将calculatedvalue变量的值作为方法的实参来传递。showresult方法不返回任何值。
6.在“代码和文本编辑器”窗口中找到之前讨论过的showresult方法。该方法只有一个的语句:
result.text = answer.tostring();
注意,即使没有参数,调用tostring方法时也使用了圆括号。
提示为了调用从属于其他对象的方法,可以在方法名之前附加对象名前缀。在上例中,表达式answer.tostring()调用的就是从属于answer对象的tostring方法。