欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C#从入门到精通 » 正文

最新评论

定义并调用获取可选参数的方法示例

创建时间:2013年08月30日 22:45  阅读次数:(5998)
分享到:
本章最后一个练习将尝试实现获取可选参数的方法,并用命名参数来调用它们。还要测试一些常见的例子,了解C#编译器如何解析涉及可选参数和命名参数的方法调用。

定义并调用获取可选参数的方法
1. 在Visual Studio 2010中打开“文档”文件夹下的\Microsoft Press\Visual CSharp Step byStep\Chapter 3\DailyRate Using Optional Parameters子文件夹中的DailyRate项目。

2. 在“解决方案资源管理器”中,双击Program.cs文件,在“代码和文本编辑器”窗口中显示代码。

3. 在Program类中,在run方法下方添加calculateFee方法。它和上一组练习中实现的方法相似,只是它获取两个具有默认值的可选参数。方法还打印一条消息,指出调用的是哪个版本的calculateFee。(将在后续的步骤中添加这个方法的重载的实现。)
private double calculateFee(double dailyRate = 500.0, int noOfDays = 1)
{
Console.WriteLine("calculateFee using two optional parameters");
return dailyRate * noOfDays;
}

4.在Program类中添加calculateFee方法的另一个实现,如下所示:这个版本获取一个可选参数(double dailyRate)。方法主体计算并返回一天的收费金额。
private double calculateFee(double dailyRate = 500.0)
{
Console.WriteLine("calculateFee using one optional parameter");
intdefaultNoOfDays = 1;
return dailyRate * defaultNoOfDays;
}

5.添加calculateFee的第三个实现。这个版本不获取任何参数,使用硬编码的每日费率(400元)和收费天数(1天)。
private double calculateFee()
{
Console.WriteLine("calculateFee using hardcoded values");
double defaultDailyRate = 400.0;
int defaultNoOfDays = 1;
return defaultDailyRate * defaultNoOfDays;
}

6.在run方法中添加以下语句来调用calculateFee并显示结果:
public void run()
{
double fee = calculateFee();
Console.WriteLine("Fee is {0}", fee);
}

7.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using hardcoded values
Fee is 400
run方法调用的是不获取任何参数的calculateFee版本,而不是获取可选参数的任何版本。这是由于该版本和方法调用最匹配。
按任意键关闭控制台窗口并返回Visual Studio。

8.在run方法中修改调用calculateFee的语句(加粗的地方):
public void run()
{
double fee = calculateFee(650.0);
Console.WriteLine("Fee is {0}", fee);
}

9.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using one optional parameter
Fee is 650
这一次,run方法调用的是获取一个可选参数的calculateFee版本。同样,这是和方法调用最匹配的版本:
按任意键关闭控制台窗口并返回Visual Studio。

10.在run方法中,再次修改调用calculateFee的语句:
public void run()
{
double fee = calculateFee(500.0, 3);
Console.WriteLine("Fee is {0}", fee);
}

11.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using two optional parameters
Fee is 1500
run方法这次调用的是获取两个可选参数的calculateFee版本。
按任意键关闭控制台窗口并返回Visual Studio。

12.在run方法中修改调用calculateFee的语句,通过名称指定dailyRate参数的值:
public void run()
{
double fee = calculateFee(dailyRate : 375.0);
Console.WriteLine("Fee is {0}", fee);
}

13.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using one optional parameter
Fee is 375
和步骤8一样,run方法调用的是获取一个可选参数的calculateFee版本。虽然使用了命名参数,但编译器对方法调用进行解析的方式没有发生改变,不会选择获取两个可选参数的版本。
按任意键关闭控制台窗口并返回Visual Studio。

14.在run方法中修改调用calculateFee的语句,通过名称指定noOfDays参数的值:
public void run()
{
double fee = calculateFee(noOfDays : 4);
Console.WriteLine("Fee is {0}", fee);
}

15.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using two optional parameters
Fee is 2000
这一次,run调用的是获取两个可选参数的calculateFee版本。在方法调用中,省略了第一个参数(dailyRate),并通过名称指定了第二个参数的值。获取两个可选参数的calculateFee是唯一和调用匹配的版本。
按任意键关闭控制台窗口并返回Visual Studio。

16.修改获取两个可选参数的calculateFee方法的实现。将第一个参数的名称更改为theDailyRate,并更新return语句,如以下加粗的代码所示:
private double calculateFee(double theDailyRate= 500.0, int noOfDays = 5)
{
Console.WriteLine("calculateFee using two optional parameters");
return theDailyRate* noOfDays;
}

17.在run方法中,修改调用calculateFee的语句,通过名称指定theDailyRate参数的值:
public void run()
{
double fee = calculateFee(theDailyRate : 375);
Console.WriteLine("Fee is {0}", fee);
}

18.在“调试”菜单中,单击“开始执行(不调试)”来生成并运行程序。程序在一个控制台窗口中运行,并显示以下消息:
calculateFee using two optional parameters
Fee is 1875

步骤12指定的是参数名是dailyRate而非theDailyRate,所以run方法会调用获取一个可选参数的那个版本的calculateFee。但这一次,run方法调用的是获取两个可选参数的calculateFee版本。在本例中,使用命名参数改变了编译器对方法调用进行解析的方式。如果提供一个命名参数,编译器会将参数名和方法声明中指定的参数名比较,选择参数名称匹配的方法。
按任意键关闭控制台窗口并返回Visual Studio。

本章讲述了如何定义方法来实现一个具名的代码块。你学习了如何向方法传递参数,以及如何从方法返回数据。另外,还知道了如何调用方法、传递参数并获取返回值。学习了如何通过不同的参数列表来重载方法,还知道了变量的作用域如何影响它的作用范围。然后,我们用Visual Studio 2010调试器对代码进行单步调试。最后,学习了如何写方法来获取可选参数,以及如何使用命名参数来调用方法。

如果想继续学习下一章,请保持Visual Studio 2010的运行状态,然后阅读第4章。 
如果想立即退出Visual Studio 2010,请在“文件”菜单上选择“退出”命令。如果看到“保存”对话框,单击“是”来保存项目。 

第3章快速参考
目 标 操 作
声明方法 在一个类的内部编写方法。例如:
int addValues(int leftHandSide, int rightHandSide)
{
...
}

从方法内部返回一个值 在方法内部写一个return语句。例如:
return leftHandSide + rightHandSide;

不等方法结束就从方法返回 在方法中写一个return语句:
return;

调用方法 写一个方法名,在圆括号中添加所有必要的实参。例如:
addValues(39, 3);

使用“生成方法存根向导” 右击一个方法调用,从弹出菜单中选择“生成方法存根(Stub)”
显示“调试”工具栏 从菜单栏中选择“视图”|“工具栏”,勾选“调试”
跳入一个方法并逐语句进行调试(Step into) 单击“调试”工具栏中的“逐语句”按钮,或者从菜单栏中选择“调试”|“逐语句” ,或者按F11
跳出一个方法,忽略对方法中的其他语句的调试,一路执行到方法尾(Step out) 单击“调试”工具栏中的“跳出”按钮,或者从菜单栏中选择“调试”|“跳出” ,或者按Shift+F11组合键
直接执行一个方法而不对其进行调试(Step over) 单击“调试”工具栏中的“逐过程”按钮,或者从菜单栏中选择“调试”|“逐过程” ,或者按F10功能键
为方法指定一个可选参数 在方法声明中,为参数提供一个默认值。例如:
void optMethod(int first, double second = 0.0, string third = "Hello")

{
...
}

利用命名参数向方法提供一个实参

在方法调用中指定参数名。例如:
optMethod(first : 100, third : "World");

I
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 89+57=? 的结果(结果是:146)
结  果: