編譯器警告 (層級 1) C4803
'method' :raise 方法具有與事件 'event' 不同的儲存類別
事件方法必須與事件宣告具有相同的儲存類別。 編譯程式會調整事件的 方法,讓記憶體類別相同。
如果您有一個從介面實作事件的類別,就可能發生此警告。 編譯程式不會隱含地為介面中的事件產生 raise 方法。 當您在類別中實作該介面時,編譯程式會隱含產生 raise 方法,而且該方法不會是虛擬的,因此會發出警告。 如需事件的詳細資訊,請參閱 事件。
如需如何關閉警告的資訊,請參閱 warning 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();
}