Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4803

"method" : metoda raise ma inną klasę magazynu niż zdarzenie "event"

Uwagi

Metody zdarzeń muszą mieć taką samą klasę magazynu jak deklaracja zdarzenia. Kompilator dostosowuje metody zdarzenia, tak aby klasy magazynu są takie same.

To ostrzeżenie może wystąpić, jeśli masz klasę, która implementuje zdarzenie z interfejsu. Kompilator nie generuje niejawnie metody raise dla zdarzenia w interfejsie. Podczas implementowania tego interfejsu w klasie kompilator niejawnie generuje metodę raise i ta metoda nie będzie wirtualna, dlatego ostrzeżenie. Aby uzyskać więcej informacji na temat zdarzeń, zobacz zdarzenie.

Zobacz ostrzeżenie pragma, aby uzyskać informacje na temat wyłączania ostrzeżenia.

Przykład

Poniższy przykład generuje kod 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();
}