gpt4 book ai didi

c# - 默认参数和 [可选] 参数有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 19:59:43 25 4
gpt4 key购买 nike

有什么区别

Method(int arg0 = 0) vs Method([Optional] int arg0 = 0);

每当我尝试调用此方法时,编译器都会说出它的模棱两可的情况。我知道为什么会出现模棱两可的情况,我的兴趣是如果它们促进相同的事情 = 可选参数,那两者之间有什么区别。然而,他们以不同的方式这样做,在视觉上列出 - 不知道在引擎盖下。

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

最佳答案

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

在 IL 中,它不像其他属性那样出现 - 它只是在参数之前有 [opt]

我会建议您不要自己明确指定它 - 而是使用语言提供的机制。

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

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

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

关于c# - 默认参数和 [可选] 参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21930486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com