方法之所以存在就是为了被调用!使用方法名来调用一个方法,要求它执行它的任务。如果方法要获取信息(由它的参数指定),就必须提供它需要的信息。如果方法要返回信息(由它的返回类型指定),就应该以某种方式来捕捉这个信息。
指定方法调用语法
为了调用一个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方法。