컴파일러 경고(수준 1) C4803
'method': raise 메서드의 스토리지 클래스가 이벤트 'event'의 스토리지 클래스와 다릅니다.
이벤트 메서드는 이벤트 선언과 동일한 스토리지 클래스를 가져야 합니다. 컴파일러는 스토리지 클래스가 같도록 이벤트의 메서드를 조정합니다.
인터페이스에서 이벤트를 구현하는 클래스가 있는 경우 이 경고가 발생할 수 있습니다. 컴파일러는 인터페이스에서 이벤트에 대한 raise 메서드를 암시적으로 생성하지 않습니다. 클래스에서 해당 인터페이스를 구현할 때 컴파일러는 raise 메서드를 암시적으로 생성하며 해당 메서드는 가상이 아니므로 경고가 발생합니다. 이벤트에 대한 자세한 내용은 이벤트를 참조하세요.
경고를 끄는 방법에 대한 자세한 내용은 경고 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();
}