在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中不存在允许该强制转换工作的魔法?某种神奇的匿名代表?感谢。
答案 0 :(得分:2)
在C#世界中是否存在某种在C ++中不存在的魔法
是。从C#2开始,您可以简单地说:
MyDelegate del = SomeFunction;
编译器将其重写为long(C#1)形式:
MyDelegate del = new MyDelegate (SomeFunction);
你在C ++ / CLI中没有这种支持,但这只是一个符号差异。没什么大不了的。