Declarar una propiedad en una clase derivada que coincide con el nombre de una propiedad en la clase base "lo oculta" (a menos que lo anule con la palabra clave override
). Tanto las propiedades de clase base como las derivadas serán devueltas por Type.GetProperties()
si sus tipos no coinciden. Sin embargo, si sus tipos coinciden con, sorprendentemente solo se devuelve la propiedad de la clase derivada. Por ejemplo:Ocultar y reflejar propiedades (C#)
class A
{
protected double p;
public int P { get { return (int)p; } set { p = value; } }
}
class B : A
{
public new int P { get { return (int)p; } set { p = value; } }
}
class C : B
{
public new float P { get { return (float)p; } set { p = value; } }
}
Calling typeof(C).GetProperties()
sólo devolverá p.e y C. P. ¿Es posible llamar al GetProperties()
de una manera que devuelva los tres? Es casi seguro que hay una manera de hacerlo al atravesar la jerarquía de herencia, pero ¿hay una solución más limpia?
¿Por qué quieres tener una jerarquía tal clase? – driis
@driis: Este es solo un ejemplo trivial para ilustrar. Pero, por el bien del argumento, supongamos que esta jerarquía de clase está escrita por alguien que no sea yo, pero aún necesito encontrar todas sus propiedades públicas, incluso las ocultas. –
Como no hay forma de que el uso de la clase derivada pueda acceder a la propiedad oculta, supongo que efectivamente no tiene esa propiedad para Reflection. Considérese afortunado, VB solo muestra C.P al usar Sombras. – Wilhelm