[C# 4.0] 4. Named & Optional Parameters
[ 2009-11-12 14:43:44 | 作者: yuhen ]
这东西不是啥新鲜玩意,N 多语言支持,尤其是动态语言中应用最为灵活。不过我倒是很期待这玩意,每次写类库搞一大堆方法重载都很郁闷。
编译器为可选参数增加了 OptionalAttribute 和 DefaultParameterValueAttribute 特性,以便于引用编译和反射调用时能获取默认值。至于命名参数,无非是变相告知参数键值而已,最终编译结果还是按照原有的规则和顺序生成方法调用。
语言的进化,是相互借鉴的结果…… 更多的是懒人的功劳……
评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=879
static void Test(string s, int x = 123, double y = 45.3d)
{
Console.WriteLine("{0},{1},{2}", s, x, y);
}
static void Main(string[] args)
{
Test("a");
Test("a", y: 99d);
Test("a", y: 99d, x: 88);
Test(y: 99d, x: 88, s: "a");
}- 可选参数: 在方法声明中直接写入默认值,调用方法时可忽略。可选参数必须放在最后,否则将引发 "Optional parameters must appear after all required parameters" 编译错误。
- 命名参数: 方法调用时可提供参数名称,如此便可自由安排参数顺序。
private static void Test(string s,
[Optional, DefaultParameterValue(0x7b)] int x,
[Optional, DefaultParameterValue(45.3)] double y)
{
Console.WriteLine("{0},{1},{2}", s, x, y);
}
private static void Main(string[] args)
{
Test("a", 0x7b, 45.3);
Test("a", 0x7b, 99.0);
Test("a", 0x58, 99.0);
Test("a", 0x58, 99.0);
}编译器为可选参数增加了 OptionalAttribute 和 DefaultParameterValueAttribute 特性,以便于引用编译和反射调用时能获取默认值。至于命名参数,无非是变相告知参数键值而已,最终编译结果还是按照原有的规则和顺序生成方法调用。
语言的进化,是相互借鉴的结果…… 更多的是懒人的功劳……
[最后修改由 yuhen, 于 2009-11-14 01:48:35]
评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=879
这篇日志没有评论。






