컴파일러 경고(수준 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();
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기