none
Qual a finalidade do reflection RRS feed

  • Pergunta

  • Qual a finalidade do reflection? Só para obter Propriedade pública de uma classe, tipos e etc...? No dia a dia, há alguma outra usabilidade do Reflection? Como utilizar o Reflection em projetos do dia a dia, projetos de business e etc..
    quinta-feira, 15 de agosto de 2013 21:10

Respostas

  • Pnet, blx

    da uma lida nesses artigos aqui para tirar suas duvidas

    http://www.macoratti.net/11/08/c_refm1.htm

    http://www.devmedia.com.br/trabalhando-com-reflection-em-c/26871

    abraço  :)


    Diego Almeida Barreto System Analyst / Software Developer

    • Marcado como Resposta pnet sexta-feira, 16 de agosto de 2013 11:36
    quinta-feira, 15 de agosto de 2013 22:13
  • Reflection pode ser usado para examinar ou modificar objetos, suas propriedades ou métodos em tempo de execução. Com reflection você ganha uma certa flexibilidade em relação a programação não sendo necessário nenhum hardcoding para conseguir o desejado.

    Se você usa Attributes ou qualquer outro tipo de Meta-data, você já está usando reflection no seu dia-a-dia, porém os Attributes por exemplo, pelo menos os base do .NET framework, são resolvidos sem você ver.

    Se você já fez uma classe desse tipo já usou reflection sem saber:

    [Serializable]
    public class Exemplo
    {
       [NonSerialized]
       public int Propriedade1 { get; set; }
            
       public string Propriedade2 { get; set; }
    }

    Por baixo dos panos, usando Reflection, o serializador em tempo de execução inspeciona a classe usando GetCustomAttributes e descobre se esta é serializável ou não, e se há alguma propriedade deve ser excluída da serialização.


    Outro exemplo clássico seria a necessidade de criar um tipo específico apenas pelo nome e assembly, que é o que acontece hoje no ModelBinder do ASP.NET MVC, em que o HTML conhece os nomes exatos das propriedades, ou da classe de origem se o objeto for mais complexo, quando se posta o Form o objeto de origem é reconstruído no server:

     /*Objeto de exemplo*/
    public class ExemploModelBinder
    {    
        public int Id { get; set; }
        public string Propriedade2 { get; set; }
    }

    /*Html Gerado pelos Helpers do MVC*/

    <input class="text-box single-line" id="Id" name="id" type="numeric" value=""> <input class="text-box single-line" id="Propriedade2" name="Propriedade2" type="text" value="">

    Quando você posta o form, o objeto esperado pelo método é reconstruído e cada input na requisição é colocado na propriedade correta pelo nome usando MemberInfo.

    Reflection torna a programação mais dinâmica. Esses são apenas alguns exemplos do que pode ser feito. O namespace System.Reflection traz uma infidade de ferramentas. Aconselho a dar uma conferida no site oficial da MSDN Reflexão na.NET Framework.

    Espero que tenha ajudado! Não sei se fui o mais claro o possível.




    sexta-feira, 16 de agosto de 2013 01:27

Todas as Respostas

  • Pnet, blx

    da uma lida nesses artigos aqui para tirar suas duvidas

    http://www.macoratti.net/11/08/c_refm1.htm

    http://www.devmedia.com.br/trabalhando-com-reflection-em-c/26871

    abraço  :)


    Diego Almeida Barreto System Analyst / Software Developer

    • Marcado como Resposta pnet sexta-feira, 16 de agosto de 2013 11:36
    quinta-feira, 15 de agosto de 2013 22:13
  • Reflection pode ser usado para examinar ou modificar objetos, suas propriedades ou métodos em tempo de execução. Com reflection você ganha uma certa flexibilidade em relação a programação não sendo necessário nenhum hardcoding para conseguir o desejado.

    Se você usa Attributes ou qualquer outro tipo de Meta-data, você já está usando reflection no seu dia-a-dia, porém os Attributes por exemplo, pelo menos os base do .NET framework, são resolvidos sem você ver.

    Se você já fez uma classe desse tipo já usou reflection sem saber:

    [Serializable]
    public class Exemplo
    {
       [NonSerialized]
       public int Propriedade1 { get; set; }
            
       public string Propriedade2 { get; set; }
    }

    Por baixo dos panos, usando Reflection, o serializador em tempo de execução inspeciona a classe usando GetCustomAttributes e descobre se esta é serializável ou não, e se há alguma propriedade deve ser excluída da serialização.


    Outro exemplo clássico seria a necessidade de criar um tipo específico apenas pelo nome e assembly, que é o que acontece hoje no ModelBinder do ASP.NET MVC, em que o HTML conhece os nomes exatos das propriedades, ou da classe de origem se o objeto for mais complexo, quando se posta o Form o objeto de origem é reconstruído no server:

     /*Objeto de exemplo*/
    public class ExemploModelBinder
    {    
        public int Id { get; set; }
        public string Propriedade2 { get; set; }
    }

    /*Html Gerado pelos Helpers do MVC*/

    <input class="text-box single-line" id="Id" name="id" type="numeric" value=""> <input class="text-box single-line" id="Propriedade2" name="Propriedade2" type="text" value="">

    Quando você posta o form, o objeto esperado pelo método é reconstruído e cada input na requisição é colocado na propriedade correta pelo nome usando MemberInfo.

    Reflection torna a programação mais dinâmica. Esses são apenas alguns exemplos do que pode ser feito. O namespace System.Reflection traz uma infidade de ferramentas. Aconselho a dar uma conferida no site oficial da MSDN Reflexão na.NET Framework.

    Espero que tenha ajudado! Não sei se fui o mais claro o possível.




    sexta-feira, 16 de agosto de 2013 01:27
  • Tanto vc como o Diego ajudaram bastante, obrigado
    sexta-feira, 16 de agosto de 2013 11:35