Bagikan melalui


Compiler Warning (level 1) C4803

'metode' : metode kenaikan memiliki kelas penyimpanan yang berbeda dari peristiwa, 'peristiwa'

Metode peristiwa harus memiliki kelas penyimpanan yang sama dengan deklarasi peristiwa. Pengkompilasi menyesuaikan metode peristiwa sehingga kelas penyimpanan sama.

Peringatan ini dapat terjadi jika Anda memiliki kelas yang mengimplementasikan peristiwa dari antarmuka. Pengkompilasi tidak secara implisit menghasilkan metode peningkatan untuk peristiwa dalam antarmuka. Ketika Anda mengimplementasikan antarmuka tersebut di kelas, pengkompilasi secara implisit menghasilkan metode kenaikan dan metode tersebut tidak akan virtual, oleh karena itu peringatan. Untuk informasi selengkapnya tentang peristiwa, lihat peristiwa.

Lihat pragma peringatan untuk informasi tentang cara menonaktifkan peringatan.

Contoh

Sampel berikut menghasilkan 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();
}