ventajas tipos poo polimorfismo polimorfico polimorfica perro parametrico manejo llamar invocar herencia funcion eventos evento event encapsulamiento ejercicio ejemplos ejemplo diferentes controlar composicion clases clase caracteristicas c# events polymorphism override

c# - tipos - Invocación de un evento de tipo campo polimórfico



tipos de polimorfismo en java (1)

Bueno, en realidad tienes dos eventos tipo campo aquí. Su sustitución sobrescribirá la parte de agregar / eliminar, pero tendrá dos campos: uno en TableMain y otro en TableSub . Solo el que está en TableSub nunca será nulo, a menos que el valor se establezca explícitamente en TableMain ... por lo tanto, si TableMain alguna vez intenta generar el evento en sí, no llamará al mismo conjunto de controladores que TableSub . Básicamente, va a comportarse de manera extraña.

El enfoque correcto es proporcionar un método protegido en TableMain para permitir que el evento sea generado por subclases:

protected void OnUpdateFilter() { Action handler = UpdateFilter; if (handler != null) { handler(); } }

Luego haga que el evento no sea virtual y elimine la anulación en TableSub .

Tenga en cuenta que la firma de su evento no coincide con la convención normal para eventos: ¿hay alguna razón para no usar EventHandler ?

Teniendo en cuenta el código a continuación:

public class TableMain { public virtual event Action UpdateFilter; .... } public class TableSub : TableMain { public override event Action UpdateFilter; public void UpdateQuery() { ..... if (UpdateFilter!=null) { UpdateFilter(); // Invocation of polymorphic field-like event??? } } }

En este código, ReSharper muestra la alerta "invocación de un evento de tipo campo polimórfico".

Mi pregunta es: ¿Qué significa realmente? ¿Y es una alerta para una mala práctica de programación? Además, ¿es una mala práctica llamar a un evento polimórficamente? (Sabiendo que un evento solo puede surgir de la clase que lo ha declarado).