Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"method" : metoda raise ma inną klasę magazynu niż zdarzenie "event"
Uwagi
Metody zdarzeń muszą mieć taką samą klasę magazynu jak deklaracja zdarzenia. Kompilator dostosowuje metody zdarzenia, tak aby klasy magazynu są takie same.
To ostrzeżenie może wystąpić, jeśli masz klasę, która implementuje zdarzenie z interfejsu. Kompilator nie generuje niejawnie metody raise dla zdarzenia w interfejsie. Podczas implementowania tego interfejsu w klasie kompilator niejawnie generuje metodę raise i ta metoda nie będzie wirtualna, dlatego ostrzeżenie. Aby uzyskać więcej informacji na temat zdarzeń, zobacz zdarzenie.
Zobacz ostrzeżenie pragma, aby uzyskać informacje na temat wyłączania ostrzeżenia.
Przykład
Poniższy przykład generuje kod 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();
}