本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第2章,第5节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2-5 命名参数与可选变量的运用
圣殿祭司的ASP.NET4.0专家技术手册
首先介绍传统C#方法定义参数与自变量赋值,进一步对比新的命名参数与选择性自变量的运用。
传统C#方法的参数与变量。
若C#的方法有声明参数(Parameter),则在调用方法时,必须指定自变量(Argument),且自变量还必须按照顺序,且不能省略任何的自变量。
程序:Parameters.aspx 参数与自变量的区别
程序说明
参数与自变量的区别在于,方法本身定义的叫参数,从外部调用方法必须赋值相关的“值”,这些值就叫自变量,参数好比是一个停车位,自变量就是一台汽车。详细请参考微软“参数和自变量之间的差异”解释。
msdn.microsoft.com/zh-tw/library/9kewt1b3(VS.80).aspx
命名参数。
命名参数(Named Parameter)可通过参数名称指定自变量值,而不一定得按照参数顺序位置指定自变量,例如:
//命名参数-以下用命名参数方式传入(维持顺序)
PersonalInfo(LastName: "Cindy", Age: 28, PhoneNo: "0933152607", City: "Taoyuan");
//命名参数-以下用命名参数方式传入(不按顺序)
PersonalInfo(City: "Kaohsiung", PhoneNo: "0922105284", LastName: "Bob", Age: 35);
//显示个人信息
protected void PersonalInfo(string LastName, int Age = 1, string PhoneNo =
"xxxxxxxxxx", string City = "xxxxx")
{
string msg=string.Format("* {0}-年龄:{1},电话:{2},城市:{3}<br/>", LastName,
Age,PhoneNo, City);
Response.Write(msg);
}
选择性自变量。
选择性自变量可以在您调用方法时省略某些参数的自变量。而之所以能够省略的原因,并非凭空得来,在方法参数定义时,一定要事先赋值参数的默认值,这样计算机才知道默认值是什么。
``//选择性参数——只输入第一个位置自变量,其余省略,方法会使用选择性参数的默认值
PersonalInfo("David");``
位置自变量与命名参数混用的规则。
若调用方法时,同时使用位置自变量与命名参数,位置自变量永远必须在命名参数之前,否则便不合法,例如:
//位置自变量->命名参数,合法!
//以下前两个是位置自变量(按照顺序),后二个命名参数(不按顺序),合法
PersonalInfo("John", 22, PhoneNo: "0935206854", City: "Taichung");
//命名参数->位置自变量,不合法!
//以下前3个是命名参数,第4个是位置自变量,
//PersonalInfo(Age: 35, PhoneNo: "0933152607", LastName: "Bob", "Taoyuan");
范例2-1 命名参数与可选自变量的运用
在此通过命名参数与选择性自变量的赋值,显示员工通信簿数据,请参考NamedOptional. aspx程序:
14 protected void Page_Load(object sender, EventArgs e)
15 {
16 //1.位置自变量-以下按照参数定义的顺序位置传入自变量
17 PersonalInfo("Mary", 25, "0936102789", "Taipei");
18 //2.命名参数-以下用命名参数方式传入(维持顺序)
19 PersonalInfo(LastName: "Cindy", Age: 28, PhoneNo: "0933152607", City:
"Taoyuan");
20 //3.命名参数-以下用命名参数方式传入(不按顺序)
21 PersonalInfo(City: "Kaohsiung", PhoneNo: "0922105284", LastName: "Bob",
Age: 35);
22
23 //4.位置自变量->命名参数,合法!
24 //以下前两个是位置自变量(按照顺序),后两个命名参数(不按顺序),合法
25 PersonalInfo("John", 22, PhoneNo: "0935206854", City: "Taichung");
26 //5.命名参数->位置自变量,不合法!
27 //以下前3个是命名参数,第4个是位置自变量,
28 //PersonalInfo(Age: 35, PhoneNo: "0933152607", LastName: "Bob",
"Taoyuan");
29
30 //6.选择性参数-只输入第一个位置自变量,其余省略,方法会使用选择性参数的默认值
31 PersonalInfo("David");
32}
33
34 //显示个人信息
35 protected void PersonalInfo(string LastName, int Age = 1, string PhoneNo =
"xxxxxxxxxx", string City = "xxxxx")
36 {
37 string msg=string.Format("* {0}-年龄:{1},电话:{2},城市:{3}<br/>",
LastName, Age, PhoneNo, City);
38 Response.Write(msg);
39}
程序说明
每个命名参数的赋值,以参数名称开头,中间以冒号与自变量值作分隔,且不限制自变量赋值的序顺。
当调用方法时若未指定自变量,计算机就会知道是选择性自变量,会以默认值显示,例如,Age年龄未指定,默认值就会是1,电话自变量未指定,就会显示××××××××××,如图2-3所示。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。