Если ваша проблема заключается в том, что повышение не является частным, то явным образом реализуйте это, как говорят документы:
http://msdn.microsoft.com/en-us/library/5f3csfsa.aspx
В итоге:
Если вы просто используете ключевое слово , вы создаете «тривиальное» событие. Компилятор генерирует add / remove / Повышение и член делегата для вас , Сгенерированная функция повышения (как говорят документы) проверяет наличие nullptr . Тривиальные события документированы здесь:
http://msdn.microsoft.com/en-us/library/4b612y2s.aspx
Если вы хотите, чтобы «больший контроль», например, сделал повышение приватным, то вы должны явно реализовать членов, как показано в ссылке. Вы должны явно объявить член данных для типа делегата. Затем вы используете ключевое слово event для объявления связанных с событием членов, как в примере Microsoft:
// event keyword introduces the scope wherein I'm defining the required methods
// "f" is my delegate type
// "Event" is the unrealistic name of the event itself
event f^ Event
{
// add is public (because the event block is public)
// "_E" is the private delegate data member of type "f"
void add(f ^ d) { _E += d; }
// making remove private
private:
void remove(f ^ d) { _E -= d; }
// making raise protected
protected:
void raise(int i)
{
// check for nullptr
if (_E)
{
_E->Invoke(i);
}
}
}// end event block
Глупо, но вот оно.
-reilly.