Partilhar via


Aviso do compilador (nível 1) C4803

«Método» : o método 'raise' tem uma classe de armazenamento diferente da do evento, «evento»

Observações

Os métodos de evento devem ter a mesma classe de armazenamento que a declaração de evento. O compilador ajusta os métodos do evento para que as classes de armazenamento sejam as mesmas.

Esse aviso pode ocorrer se você tiver uma classe que implementa um evento de uma interface. O compilador não gera implicitamente um método raise para um evento em uma interface. Quando você implementa essa interface em uma classe, o compilador gera implicitamente um método raise e esse método não será virtual, daí o aviso. Para obter mais informações sobre eventos, consulte evento.

Consulte pragma de aviso para obter informações sobre como desativar um aviso.

Example

O exemplo a seguir gera 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();
}