En siguiente código, quiero extender el comportamiento de una clase derivando/subclasificación de ella, y hacer uso de un evento de la clase base:¿Por qué los eventos no se pueden usar de la misma manera en las clases derivadas que en la clase base en C#?
public class A
{
public event EventHandler SomeEvent;
public void someMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs);
}
}
public class B : A
{
public void someOtherMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs); // << why is this not possible?
//Error: The event 'SomeEvent' can only appear on the left hand side of += or -=
//(except when used from within the type 'A')
}
}
Por qué no es posible?
¿Y cuál es la solución común para este tipo de situación?
No utilice el prefijo '' Levante ..., siempre debería ser '' En .... Además, el método de la clase base debe ser virtual. – Keith
Gracias también por la pista para multihilo. –
No creo que esta sea una buena respuesta porque no aborda la situación en la que la función externa que está delegando tanto en someOtherMethod como en algún método para recibir los mismos parámetros que algunosMethod o someOtherMethod puede tener. en el caso de ObjectDataSource de ASP, si especifica la opción OnSelecting, pasa OnSeleccionar algunos objetos, Object Sender y ObjectDataSourceSelectingEventArgs e. Ahora, en el caso de que haya llenado previamente el ODSSEA con un parámetro que está pasando a otras funciones, este ejemplo es inútil. No se puede pensar en una solución ... –