C ++ / CLI и C #, «Приведение» функций к делегатам, что такое совок? - PullRequest
3 голосов
/ 06 мая 2010

В 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, которая позволяет этому приведению работать? Какой-то волшебный анонимный делегат? Спасибо.

1 Ответ

2 голосов
/ 06 мая 2010

Существует ли какая-то магия в мире C #, которой нет в C ++

Да. Начиная с C # 2, вы можете просто сказать:

  MyDelegate del = SomeFunction;

И компилятор переписывает его в длинную (C # 1) форму:

 MyDelegate del = new MyDelegate (SomeFunction);

У вас нет такой поддержки в C ++ / CLI, но это просто нотационная разница. Ничего страшного.

...