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

Ail*_*ria 7 c#

有什么区别

Method(int arg0 = 0) vs Method([Optional] int arg0 = 0);
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 15

OptionalAttribute当你指定一个可选的参数,基本上是由编译器自动应用.(这有点像ExtensionAttribute为扩展方法提供的.)

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

我建议你不要自己明确指定 - 改用语言提供的机制.

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

void Foo(int x = 5)
void Foo([Optional, DefaultParameterValue(5)] int x = 5)
Run Code Online (Sandbox Code Playgroud)

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