Piccolo domanda su C design # lingua :))del linguaggio C# Design: implementazione dell'interfaccia esplicita di un evento
Se avessi un'interfaccia simile a questo:
interface IFoo {
int Value { get; set; }
}
E 'possibile implementare in modo esplicito tale interfaccia utilizzando C# 3.0 proprietà auto-implementato:
sealed class Foo : IFoo {
int IFoo.Value { get; set; }
}
Ma se dovessi un evento nell'interfaccia:
interface IFoo {
event EventHandler Event;
}
E cercando di attuare in modo esplicito utilizzando campo simile evento:
sealed class Foo : IFoo {
event EventHandler IFoo.Event;
}
mi metterò il seguente errore del compilatore:
error CS0071: An explicit interface implementation of an event must use event accessor syntax
Credo che gli eventi sul campo come è il una sorta di dualismo per le proprietà auto-implementate.
Quindi la mia domanda è: qual è il motivo di progettazione per tale restrizione fatto?
Sono sicuro che la spiegazione di Andreas Huber è corretta. Puoi aggirare il problema avendo un altro evento privato che chiami dall'implementazione esplicita. In questo modo otterrete tutte le funzionalità automatiche (thread-safety stuff, ecc.) Dalla funzionalità di eventi di tipo field. Esempio: 'sealed class Foo: IFoo { event EventHandler privateEventFieldLike; event EventHandler IFoo.Event {add {privateEventFieldLike + = value; } remove {privateEventFieldLike - = value; }} } ' –