为什么我不能为托管类型的成员函数或泛型函数声明默认参数?C# 4.0
引入了命名和可选参数;有类似的事情CLI
吗?
我不明白为什么不能声明这样的方法:
void Optional(int argument = 0);
然后,当我调用Optional();
编译器时,不会将此调用转换为:Optional(0);
。
为什么我不能为托管类型的成员函数或泛型函数声明默认参数?C# 4.0
引入了命名和可选参数;有类似的事情CLI
吗?
我不明白为什么不能声明这样的方法:
void Optional(int argument = 0);
然后,当我调用Optional();
编译器时,不会将此调用转换为:Optional(0);
。
看起来 C++/CLI 编译器没有为此发出正确的 IL 指令。它不会发出.param [1] = int32(0)
C# 用于识别默认参数的指令。如果您在 ILDasm 中打开生成的程序集,您会看到它。
编译的一种方法是使用属性Optional
和命名空间,但 C# 不使用这些作为默认参数,因此目前没有简单的方法来创建重载。DefaultParameterValue
System::Runtime::InteropServices
您可以在此处找到有关这些属性的问题:https ://stackoverflow.com/a/4974528/93652