技术开发 频道

C#4.0初探:Optional and named parameters

  2.内部实现

  ILDASM反编译一下Test.OptionalAndNamedParams,代码段为:

.method public hidebysig instance void  OptionalAndNamedParams(int32 a,
                                                               [opt]
string b,
                                                               [opt]
object c) cil managed
{
  .param [
2] = ""
  .param [
3] = "http://www.xianfen.net"
  
// ...

 

  可选参数前声明为OptionalAttribute特性。这是C#4.0的语法糖。

  Test.OptionalAndNamedParams方法等价的代码为:

public void OptionalAndNamedParams(int a,
    [Optional, DefaultParameterValue(
"")] string b,
    [Optional, DefaultParameterValue(
"http://www.xianfen.net")] object c)
{
    Console.WriteLine(
"a:{0}, b:{1}, c:{2}", a, b, c);
}

  如果不用DefaultParameterValueAttribute特性设置默认值,则输出为:



  现在知道了Office开发中Missing的原因了。

  OptionalAttribute和DefaultParameterValueAttribute不是FCL的新类,他们把方法的参数声明为可选方法和指定默认值,以便被支持可选参数和默认参数的语言调用(如VB、VC++等)。

0
相关文章