Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

95
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!