在为.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

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

这个问题没有暗示真正的问题,我无法得到回复。但后来意识到可能会发生什么,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。当然很容易修复