Compartilhar via


Aviso do compilador (nível 1) C4803

'method': o método raise possui uma classe de armazenamento diferente da classe do evento, 'event'

Os métodos de evento precisam 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 poderá ocorrer se você tiver uma classe que implemente 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 é virtual, o que justifica o aviso. Para obter mais informações sobre eventos, confira event.

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

Exemplo

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