在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中没有这种支持,但这只是符号上的区别。没什么大不了。