7
爲什麼我無法爲託管類型或泛型函數的成員函數聲明默認參數? C# 4.0
介紹Named and Optional Arguments;有類似的事情CLI
?C++/CLI可選參數
我不明白爲什麼不能聲明的方法是這樣的:
void Optional(int argument = 0);
,然後當我打電話Optional();
編譯器不翻譯此調用到:Optional(0);
。
爲什麼我無法爲託管類型或泛型函數的成員函數聲明默認參數? C# 4.0
介紹Named and Optional Arguments;有類似的事情CLI
?C++/CLI可選參數
我不明白爲什麼不能聲明的方法是這樣的:
void Optional(int argument = 0);
,然後當我打電話Optional();
編譯器不翻譯此調用到:Optional(0);
。
它看起來像C++/CLI編譯器不會爲此發出正確的IL指令。它不會發出指令.param [1] = int32(0)
,C#用它來識別默認參數。如果你在ILDasm中打開生成的程序集,你會看到它。
是編譯是從System::Runtime::InteropServices
命名空間中的屬性Optional
和DefaultParameterValue
,但C#不使用這些默認參數,所以目前有圍繞創建超載沒有簡單的方法的一種方式。
你可以找到這個問題詢問這裏的那些屬性:https://stackoverflow.com/a/4974528/93652
所以C++/CLI編譯器不知道如何生成的指令。我希望用VS(12?)來解決問題。 – gliderkite 2012-04-25 14:26:05
我也希望如此。有趣的是,語言似乎以不同的方式處理。我聽說VB.Net通過使用Attributes來完成它。所以我想這將是最好的,如果這兩個屬性和指令生成。 – Botz3000 2012-04-25 14:28:06