pequeña pregunta sobre C diseño # idioma :))C Diseño # Idioma: implementación de interfaz explícita de un evento
Si tuviera una interfaz de esta manera:
interface IFoo {
int Value { get; set; }
}
Es posible implementar explícitamente este tipo de interfaz con C# 3.0 propiedades implementadas automáticamente:
sealed class Foo : IFoo {
int IFoo.Value { get; set; }
}
Pero si tuviera un evento en la interfaz:
interface IFoo {
event EventHandler Event;
}
Y tratando de poner en práctica de forma explícita el uso de campo como evento:
sealed class Foo : IFoo {
event EventHandler IFoo.Event;
}
voy a tener el siguiente error de compilación:
error CS0071: An explicit interface implementation of an event must use event accessor syntax
creo que los eventos de campo, como es el algún tipo de dualismo para las propiedades implementadas automáticamente.
Así que mi pregunta es: cuál es la razón para el diseño de dicha restricción hace?
Estoy seguro de que la explicación de Andreas Huber es correcta. Puede solucionar el problema teniendo otro evento privado al que llame desde la implementación explícita. De esta forma, obtendrá todas las funciones automáticas (material de seguridad de hilos, etc.) de la funcionalidad de eventos de tipo campo. Ejemplo: 'clase sellada Foo: IFoo { evento EventHandler privateEventFieldLike; evento EventHandler IFoo.Event {add {privateEventFieldLike + = value; } remove {privateEventFieldLike - = value; }} } ' –