Предупреждение компилятора (уровень 1) C4803
"method": метод вызова имеет другой класс хранилища, отличный от класса хранилища события, "event"
Методы событий должны иметь тот же класс хранилища, что и объявление события. Компилятор настраивает методы события таким образом, чтобы классы хранилища были одинаковыми.
Это предупреждение может возникать, если у вас есть класс, реализующий событие из интерфейса. Компилятор неявно создает метод вызова события в интерфейсе. При реализации этого интерфейса в классе компилятор неявно создает метод вызова, и этот метод не будет виртуальным, поэтому предупреждение. Дополнительные сведения о событиях см. в разделе "События".
Сведения о отключении предупреждения см . в разделе pragma .
Пример
Следующий пример приводит к возникновению ошибки 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();
}