Pregunta

Necesito acceder a algunos miembros marcados como internos que están declarados en una asamblea de terceros.

Me gustaría devolver un valor de una propiedad interna particular en una clase. Entonces me gustaría recuperar un valor de una propiedad en ese valor devuelto. Sin embargo, estas propiedades devuelven tipos que también son internos y están declarados en este conjunto de terceros.

Los ejemplos de hacer esto que he visto son simples y solo muestran devolver int o bool. ¿Alguien puede dar algún código de ejemplo que maneje este caso más complejo?

¿Fue útil?

Solución

Simplemente sigue investigando el valor devuelto (o el PropertyType de PropertyInfo):

u

sing System;
using System.Reflection;
public class Foo
{
    public Foo() {Bar = new Bar { Name = "abc"};}
    internal Bar Bar {get;set;}
}
public class Bar
{
    internal string Name {get;set;}
}
static class Program
{
    static void Main()
    {
        object foo = new Foo();
        PropertyInfo prop = foo.GetType().GetProperty(
            "Bar", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object bar = prop.GetValue(foo, null);
        prop = bar.GetType().GetProperty(
            "Name", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object name = prop.GetValue(bar, null);

        Console.WriteLine(name);
    }
}

Otros consejos

Siempre puede recuperarlo como un objeto y usar la reflexión sobre el tipo devuelto para invocar sus métodos y acceder a sus propiedades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top