首页 > 编程开发 > Objective-C编程 >
-
c#4.01之Dynamic 4
这东西不是啥新鲜玩意,N 多语言支持,尤其是动态语言中应用最为灵活。不过我倒是很期待这玩意,每次写类库搞一大堆方法重载都很郁闷。
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 特性,以便于引用编译和反射调用时能获取默认值。至于命名参数,无非是变相告知参数键值而已,最终编译结果还是按照原有的规则和顺序生成方法调用。
语言的进化,是相互借鉴的结果…… 更多的是懒人的功劳……