在为.Net编译C ++ / CLI时保留委托参数名称

在C#中,我可以使用Visual Studio来保留委托的参数名称。
例如,如果我有:

public delegate void Blah(object myArg); public event Blah Foo; 

然后,当我向事件添加方法时,Visual Studio UI会自动保留名称并创建方法:

 void Form1_Foo(object myArg); 

但是,如果我在C ++ / CLI中声明一个委托:

 public: delegate void Blah(Object^ myArg); event Blah^ Foo; 

它不保留名称并创建一个具有无意义名称的方法:

 void Form1_Foo(object A_0) 

如何在C ++ / CLI中为参数设置有意义的名称?

编辑(添加ildasm结果):

C ++ CLI事件:

 .method public hidebysig specialname instance void Invoke(object myArg) cil managed { } // end of method Blah::Invoke 

C#事件:

 .method public hidebysig newslot virtual instance void Invoke(object myArg) runtime managed { } // end of method Blah::Invoke 

问题没有暗示真正的问题,我无法得到一个复制品。 但后来意识到可能发生的事情,C ++编译器与其他托管编译器和MSIL不同,它不需要在声明中命名参数。 淘汰出局:

 namespace CppClassLibrary { public ref class Example { public: delegate void Blah(int, int, int, int); event Blah^ Foo; }; } 

在C#中生成此自动生成的事件处理程序:

  void test_Foo(int A_0, int A_1, int A_2, int A_3) { throw new NotImplementedException(); } 

看起来像一个灌篮的解释。 您只是忘记在委托声明中命名参数,C ++编译器被强制合成它们以便编写正确的MSIL。 当然容易修复。