Advertencia del compilador (nivel 1) C4803
"method": el método raise tiene una clase de almacenamiento distinta de la del evento, "event"
Los métodos de evento deben tener la misma clase de almacenamiento que la declaración de eventos. El compilador ajusta los métodos del evento para que las clases de almacenamiento sean las mismas.
Esta advertencia puede producirse si tiene una clase que implementa un evento desde una interfaz. El compilador no genera implícitamente un método raise para un evento en una interfaz. Al implementar esa interfaz en una clase, el compilador genera implícitamente un método raise y ese método no será virtual, por lo tanto, la advertencia. Para más información sobre los eventos, vea event.
Consulte pragma de advertencia para obtener información sobre cómo desactivar una advertencia.
Ejemplo
El ejemplo siguiente genera la advertencia C4803:
// C4803.cpp
// compile with: /clr /W1
using namespace System;
public delegate void Del();
ref struct E {
Del ^ _pd1;
event Del ^ E1 {
void add (Del ^ pd1) {
_pd1 = dynamic_cast<Del ^>(Delegate::Combine(_pd1, pd1));
}
void remove(Del^ pd1) {
_pd1 = dynamic_cast<Del^> (Delegate::Remove(_pd1, pd1));
}
virtual void raise() { // C4803 warning (remove virtual)
if (_pd1)
_pd1();
}
}
void func() {
Console::WriteLine("In E::func()");
}
};
int main() {
E ^ ep = gcnew E;
ep->E1 += gcnew Del(ep, &E::func);
ep->E1();
ep->E1 -= gcnew Del(ep, &E::func);
ep->E1();
}