Partager via


Avertissement du compilateur (niveau 1) C4803

'method' : la méthode raise a une classe de stockage différente de celle de l’événement, 'event'

Les méthodes d’événement doivent avoir la même classe de stockage que la déclaration d’événement. Le compilateur ajuste les méthodes de l’événement afin que les classes de stockage soient identiques.

Cet avertissement peut se produire si vous avez une classe qui implémente un événement à partir d’une interface. Le compilateur ne génère pas implicitement une méthode de génération pour un événement dans une interface. Lorsque vous implémentez cette interface dans une classe, le compilateur génère implicitement une méthode de génération et cette méthode ne sera pas virtuelle, d’où l’avertissement. Pour plus d’informations sur les événements, consultez l’événement.

Pour plus d’informations sur la désactivation d’un avertissement, consultez pragma d’avertissement .

Exemple

L’exemple suivant génère l’erreur 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();
}