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