Как я могу предоставить делегата в классе управляемого интерфейса - PullRequest
2 голосов
/ 20 июля 2010

Я работаю над проектом, содержащим части C #, управляемый C ++, а также неуправляемый код C ++.Я работаю с .NET 3.5.

Мой опыт программирования больше зависит от неуправляемой стороны C ++, и я не очень знаком с концепциями .NET.

Мой вопрос: как я могускрыть / предоставить делегата за классом управляемого интерфейса.

Предположим, мой интерфейс выглядит как sth.вот так ...

// I guess this is a type definition so it has to be placed outside of the interface
delegate void SignalStrengthDelegate(short input);

public interface class Test
{
    event SignalStrengthDelegate^ signalStrengthChanged;

    void doSomething();
};

... тогда я получаю ошибку компилятора в классе ref, реализующем этот интерфейс.Ошибка предполагает, что я должен реализовать методы для добавления удаления делегатов.После попытки сделать это компилятор просит меня переключиться на / clr: oldSyntax ... так что это тоже не то, что я ищу.

Я много гуглял, но не могу найти никаких предложений по моей проблеме... в какой-то момент у меня возникает ощущение, что делегаты и интерфейсы представляют собой некие противоречивые понятия и не должны смешиваться.

Есть предложения?

TIA!

Ответы [ 3 ]

1 голос
/ 20 июля 2010

Ну, вы объявляете событие - а событие в основном представляет собой пару добавления / удаления. Вот почему вы получаете ошибку компилятора. Я подозреваю, что вы можете сделать это, но не с синтаксисом, который вы использовали. Было бы очень странно, если бы вы не могли реализовать события в C ++ / CLI.

Вы можете прочитать мою статью о событиях, делегатах и ​​различиях между ними .

Что вы действительно пытаетесь сделать? Хотите свойство типа делегата? Или метод, который имеет тип делегата в качестве параметра? Вы говорите, что хотите «скрыть / предоставить делегата» - что именно вы имеете в виду?

0 голосов
/ 20 июля 2010

Я выкопал статью, которая, кажется, показывает правильный синтаксис: http://msdn.microsoft.com/en-us/magazine/cc163659.aspx

...