Compilerwarnung (Ebene 1) C4803
'method' : Die Raise-Methode weist eine andere Speicherklasse als die des Ereignisses auf, 'event'.
Ereignismethoden müssen dieselbe Speicherklasse wie die Ereignisdeklaration aufweisen. Der Compiler passt die Methoden des Ereignisses so an, dass die Speicherklassen identisch sind.
Diese Warnung kann auftreten, wenn Sie über eine Klasse verfügen, die ein Ereignis von einer Schnittstelle implementiert. Der Compiler generiert keine Auslösenmethode für ein Ereignis in einer Schnittstelle. Wenn Sie diese Schnittstelle in einer Klasse implementieren, generiert der Compiler implizit eine Raise-Methode und diese Methode ist nicht virtuell, daher die Warnung. Weitere Informationen zu Ereignissen finden Sie unter "Event".
Informationen zum Deaktivieren einer Warnung finden Sie unter "Warn pragma".
Beispiel
Im folgenden Beispiel wird C4803 generiert.
// 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();
}