2012-04-25 52 views
7

为什么我无法为托管类型或泛型函数的成员函数声明默认参数? C# 4.0介绍Named and Optional Arguments;有类似的事情CLIC++/CLI可选参数

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

void Optional(int argument = 0); 

,然后当我打电话Optional();编译器不翻译此调用到:Optional(0);

回答

8

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

编译是从System::Runtime::InteropServices命名空间中的属性OptionalDefaultParameterValue,但C#不使用这些默认参数,所以目前有围绕创建超载没有简单的方法的一种方式。

你可以找到这个问题询问这里的那些属性:https://stackoverflow.com/a/4974528/93652

+0

所以C++/CLI编译器不知道如何生成的指令。我希望用VS(12?)来解决问题。 – gliderkite 2012-04-25 14:26:05

+0

我也希望如此。有趣的是,语言似乎以不同的方式处理。我听说VB.Net通过使用Attributes来完成它。所以我想这将是最好的,如果这两个属性和指令生成。 – Botz3000 2012-04-25 14:28:06