分享方式:


編譯器警告 (層級 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();
}