Default和[Optional]参数有什么区别?

时间:2014-02-21 09:37:56

标签: c#

之间有什么区别
Method(int arg0 = 0) vs Method([Optional] int arg0 = 0);

每当我试图调用此方法时,编译器都会说它的模糊情况。我知道为什么它是模棱两可的情况,我的兴趣是那两个如果他们促进相同的事情=可选参数之间的差异。然而,他们以不同的方式这样做,在视觉上列表 - 不知道在幕后。

有人向我指出,第一种方式实际上是DEFAULT使用,这意味着您将初始化默认值,而第二种方式是可选的,它将在您不定义任何默认值的情况下使用 - 虽然它有意义,但是它们是两者都可以很容易地分配值而不是。它们的真正区别和用途是什么?

1 个答案:

答案 0 :(得分:15)

基本上,当您指定可选参数时,编译器会自动应用OptionalAttribute。 (这有点像为扩展方法提供的ExtensionAttribute。)

在IL中,它看起来不像其他属性 - 它只是在参数之前有[opt]

我建议你自己明确指定它 - 改为使用语言提供的机制。

请注意,您也可以使用DefaultParameterValueAttribute指定默认值。所以这两个声明是等价的:

void Foo(int x = 5)
void Foo([Optional, DefaultParameterValue(5)] int x = 5)

存在这些属性的事实允许不明确支持它们的语言仍然表达它们 - 因此您可以编写一个C#2程序,该程序使用可选参数公开方法,以便在VB中使用。

相关问题