2012-04-25 201 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