Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

89
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda