9

为什么我不能为托管类型的成员函数或泛型函数声明默认参数?C# 4.0引入了命名和可选参数;有类似的事情CLI吗?

我不明白为什么不能声明这样的方法:

void Optional(int argument = 0);

然后,当我调用Optional();编译器时,不会将此调用转换为Optional(0);

4

1 回答 1

11

看起来 C++/CLI 编译器没有为此发出正确的 IL 指令。它不会发出.param [1] = int32(0)C# 用于识别默认参数的指令。如果您在 ILDasm 中打开生成的程序集,您会看到它。

编译的一种方法是使用属性Optional和命名空间,但 C# 不使用这些作为默认参数,因此目前没有简单的方法来创建重载。DefaultParameterValueSystem::Runtime::InteropServices

您可以在此处找到有关这些属性的问题:https ://stackoverflow.com/a/4974528/93652

于 2012-04-25T13:13:20.553 回答