WEB开发网
开发学院软件开发C语言 [C# 4.0] 4. Optional Parameters 阅读

[C# 4.0] 4. Optional Parameters

 2010-09-30 21:04:13 来源:WEB开发网   
核心提示:这东西不是啥新鲜玩意,N 多语言支持,[C# 4.0] 4. Optional Parameters,尤其是动态语言中应用最为灵活,不过我倒是很期待这玩意,无非是变相告知参数键值而已,最终编译结果还是按照原有的规则和顺序生成方法调用,每次写类库搞一大堆方法重载都很郁闷, staticvoidTest(strings,i

这东西不是啥新鲜玩意,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 特性,以便于引用编译和反射调用时能获取默认值。至于命名参数,无非是变相告知参数键值而已,最终编译结果还是按照原有的规则和顺序生成方法调用。

语言的进化,是相互借鉴的结果…… 更多的是懒人的功劳…… [C# 4.0] 4. Optional Parameters

Tags:Optional Parameters

编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接