在为.net编译c++ /CLI时保留委托参数名称
本文关键字:参数 保留 编译 net c++ CLI 在为 | 更新日期: 2023-09-27 18:19:00
在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中为参数设置有意义的名称?
EDIT (add ildasm results):
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。当然很容易修复