Se scrivo qualcosa come il codice qui sotto,Perché gli eventi con accessori personalizzati non possono essere attivati direttamente come fanno quelli predefiniti?
class MainClass
{
static EventHandler _myEvent= delegate{};
static event EventHandler MyEvent
{
add{_myEvent += value;}
remove{_myEvent -= value;}
}
public static void Main (string[] args)
{
MyEvent(null,EventArgs.Empty);
}
}
il compilatore si lamenta: CS0079 Errore: L'evento MainClass.MyEvent' can only appear on the left hand side of
+ = 'o `- =' operatore.
Perché qualcosa di così strano come questo esiste? Se non posso lanciare un evento direttamente, perché dovrei usare una cosa del genere in primo luogo? È un bug (sto usando mono) o un design delicato e deliberato? Qualcuno potrebbe per favore insegnarmi la logica dietro a questo? Grazie in anticipo.
Questo non è il problema qui. Il tentativo di accedere all'evento _è_ dall'interno della classe dichiarante ... –
@Nick: No, questo è assolutamente dire cosa sta succedendo: per un evento di tipo campo una chiamata che sembra invocare l'evento sta effettivamente invocando tramite il campo . Quindi prendi quella conoscenza e applicala all'evento personalizzato - invocando * quello * anche attraverso il campo di supporto. –
@Jon: Concordo sul fatto che è possibile lavorare all'indietro da come vengono implementati eventi di tipo field per comprendere l'errore CS0079. Se la risposta fosse concentrata su questo, sarebbe stato +1 e fatto da me. Tuttavia, la risposta si concentra sull'accessibilità privata del campo, e questo è oltre il punto. –