none
Problema al acceder a una propiedad a traves de reflexion RRS feed

  • Pregunta

  • Hola, el problema en cuestion es el siguiente:

     

    Tengo una clase aplicacionBase con una propiedad que representa una coleccion:

     

    public class aplicacionBase

    {

    private ColeccionX coleccion1;

     

    public ColeccionX Coleccion1

    {

      get {...}

      set {...}

    }

    }

     

    Por otro lado tengo otra clase applicacion que hereda de aplicacionBase y que tiene una propiedad que accede a la propiedad coleccion1 de applicacionBase:

     

    public class aplicacion : aplicacionBase

    {

    public new ColeccionX Coleccion1

    {

    get { return base.Coleccion1;}

    set { base.Coleccion1 = value;}

    }

    }

     

    el problema viene cuando quiero acceder a la propiedad coleccion1 por reflexion:

     

    application.getType().getProperty("Coleccion1").getValue(application,null);

     

    Da un error de ambigüedad porque no sabe a que propiedad llamar.

     

    Como puedo Solucionar esto??

     

    Gracias.

     

     

     

     

     

     

    jueves, 14 de febrero de 2008 14:32

Respuestas

  • Ya esta claro, era:

     

    elObjeto.GetType(),GetProperty("Collecion1",BindingFlags.Instance | BindingFlags.Public |BindingFlags.DeclaredOnly).GetValue(elobjeto,null);

    jueves, 14 de febrero de 2008 16:25

Todas las respuestas

  • creo que esta mal...

     

     

    Code Snippet

    application.getType().getProperty("Coleccion1").getValue(application,null);

     

     

     

    mmm:

     

    Code Snippet

    aplicacion elObjeto = new aplicacion();

    elObjeto.GetType().GetProperty("aplicacion.Coleccion1").GetValue(application, null);

     

     

     

    jueves, 14 de febrero de 2008 15:01
    Moderador
  • Lo he probado y no funciona devuelve nulo, tambien he probado a poner

     

    elObjeto.GetType().GetProperty("Coleccion1",BindingFlags.DeclaredOnly).GetValue(application, null);

     

    y tampoco funciona, tambien devuelve nulo y  la coleccion tanto de la aplicacion como la de la aplicacionBase estan inicializadas en el constructor.

     

    Alguna Sugerencia??

     

    jueves, 14 de febrero de 2008 15:55
  • que raro...

    este me funciono sin problemas

     

    Code Snippet

    using System.Diagnostics;

    using System;

    namespace ConsoleApplication1

    {

    public class aplicacionBase

    {

    public int[] Coleccion1

    {

    get

    { return new int[5]; }

    set

    {

    }

    }

    }

     

    public class aplicacion : aplicacionBase

    {

    public new int[] Coleccion1

    {

    get { return base.Coleccion1; }

    set { base.Coleccion1 = value; }

    }

    }

     

    class Program

    {

    static void Main(string[] args)

    {

    aplicacion a = new aplicacion();

    int[] p = (int[])a.GetType().GetProperty("Coleccion1").GetValue(a, null);

    Console.ReadLine();

    }

    }

    }

     

     

     

    jueves, 14 de febrero de 2008 16:23
    Moderador
  • Ya esta claro, era:

     

    elObjeto.GetType(),GetProperty("Collecion1",BindingFlags.Instance | BindingFlags.Public |BindingFlags.DeclaredOnly).GetValue(elobjeto,null);

    jueves, 14 de febrero de 2008 16:25
  • Lo siento se me olvido decir que Coleccion1 de apliacion hereda tambien de una ColeccionBase. Y la coleccion definida en apliacionBase es del tipo ColeccionBase. Un poco enrevesado no crees??.Gracias por tu respuesta.

     

    jueves, 14 de febrero de 2008 16:29
  • si claro olvidasde el dato mas importante...

     

    Me alegro que  lo hayas resuelto.

     

    jueves, 14 de febrero de 2008 16:32
    Moderador