Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

90
Vistas
Obtener propiedad privada de una propiedad privada usando la reflexión.
public class Foo { private Bar FooBar {get;set;} private class Bar { private string Str {get;set;} public Bar() {Str = "some value";} } }

Si tengo algo como lo anterior y tengo una referencia a Foo, ¿cómo puedo usar la reflexión para obtener el valor Str out Foo's FooBar? Sé que no hay una razón real para hacer algo como esto (o muy, muy pocas formas), pero me imagino que tiene que haber una manera de hacerlo y no puedo encontrar la manera de lograrlo.

editado porque hice la pregunta incorrecta en el cuerpo que difiere de la pregunta correcta en el título

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede usar el método GetProperty junto con las marcas de vinculación NonPublic e Instance .

Suponiendo que tiene una instancia de Foo , f :

 PropertyInfo prop = typeof(Foo).GetProperty("FooBar", BindingFlags.NonPublic | BindingFlags.Instance); MethodInfo getter = prop.GetGetMethod(nonPublic: true); object bar = getter.Invoke(f, null);

Actualizar :

Si desea acceder a la propiedad Str , simplemente haga lo mismo en el objeto de la bar que se recupera:

 PropertyInfo strProperty = bar.GetType().GetProperty("Str", BindingFlags.NonPublic | BindingFlags.Instance); MethodInfo strGetter = strProperty.GetGetMethod(nonPublic: true); string val = (string)strGetter.Invoke(bar, null);
over 4 years ago · Santiago Trujillo Denunciar

0

Hay una forma de simplificar ligeramente la respuesta de Andrew .

Reemplace las llamadas a GetGetMethod() + Invoke() con una sola llamada a GetValue() :

 PropertyInfo barGetter = typeof(Foo).GetProperty("FooBar", BindingFlags.NonPublic | BindingFlags.Instance); object bar = barGetter.GetValue(f); PropertyInfo strGetter = bar.GetType().GetProperty("Str", BindingFlags.NonPublic | BindingFlags.Instance); string val = (string)strGetter.GetValue(bar);

Hice algunas pruebas y no encontré ninguna diferencia, luego encontré esta respuesta , que dice que GetValue() llama a GetGetMethod() con verificación de errores, por lo que no hay una diferencia práctica (a menos que se preocupe por el rendimiento, pero al usar Reflexión supongo que no).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda