Condividi tramite


Avviso del compilatore (livello 1) C4803

'method': il metodo raise ha una classe di archiviazione diversa da quella dell'evento 'event'

I metodi di evento devono avere la stessa classe di archiviazione della dichiarazione di evento. Il compilatore regola i metodi dell'evento in modo che le classi di archiviazione siano uguali.

Questo avviso può verificarsi se si dispone di una classe che implementa un evento da un'interfaccia. Il compilatore non genera in modo implicito un metodo di generazione per un evento in un'interfaccia. Quando si implementa tale interfaccia in una classe, il compilatore genera in modo implicito un metodo di generazione e tale metodo non sarà virtuale, di conseguenza l'avviso. Per altre informazioni sugli eventi, vedere evento.

Per informazioni su come disattivare un avviso, vedere pragma di avviso .

Esempio

L'esempio seguente genera l'errore 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();
}