在C#2.0中,我可以执行以下操作:


public class MyClass
{
     delegate void MyDelegate(int myParam);

     public MyClass(OtherObject obj)
     {
//THIS IS THE IMPORTANT PART
           obj.SomeCollection.Add((MyDelegate)MyFunction);
     }

     private void MyFunction(int myParam);
     {
           //...
     }
}


尝试在C ++ / CLI中实现相同的功能,看来我必须这样做:


MyDelegate del = gcnew MyDelegate(this, MyFunction);
obj->SomeCollection->Add(del);


显然,我也可以在C#中创建该委托的新实例,而不是在那里进行操作。在C#世界中发生了某种魔术,这种魔术在C ++ / CLI中不存在,从而无法进行强制转换吗?某种神奇的匿名代表?谢谢。

最佳答案

C#世界中发生了某种C ++中不存在的魔术吗


是。从C#2开始,您可以简单地说:

  MyDelegate del = SomeFunction;


然后编译器将其重写为长格式(C#1):

 MyDelegate del = new MyDelegate (SomeFunction);


您在C ++ / CLI中没有这种支持,但这只是符号上的区别。没什么大不了。

10-04 10:29