Este documento discute a técnica de reflection no .NET, permitindo que um programa leia seus próprios metadados. Isso permite a introspecção e uso de representações textuais para executar funções em assemblies desconhecidos, como instanciar objetos e chamar métodos. Exemplos demonstram como carregar formulários dinamicamente usando reflection.
2. Objectivos
● perceber conceito de reflection
● identificar aplicações potenciais desta técnica
3. Reflection
● Processo através do qual um programa pode
ler os seus metadados
Aplicação .Net
Source (vb, c#, jscript, cobol.net, …)
PE – portable executable (.exe, .dll)
JIT Compiler
4. Reflection
● Através dessa introspecção e usando esses
metadados podemos:
– conhecer toda a estrutura desse assembly (.dll,
.exe)
● por exemplo, saber quais os seus métodos,
propriedades, ...
– usar uma representação textual para executar
funções nesses assemblies
● por exemplo, instanciar objectos, executar métodos, ...
5. Reflection
● Podemos desenvolver uma aplicação que irá
utilizar objectos que desconhece!
– exemplo:
● gestor de documentos. só sabe que tem que abrir, fechar
objectos. não sabe se esse objecto é do tipo
Empresa.Produto.Objecto1 ou Empresa2.ObjectoXpto
7. MultiITV
● Objectivo futuro
– ter módulos desenvolvidos em Progress e outros
em .Net
– permitir um deployment (instalação no cliente)
simples / incremental
● Reflection
– Desenvolve-se um novo módulo em .Net num
assembly autónomo
– Configura-se a aplicação de forma a que passe a
chamar esse módulo em vez do anterior programa
Progress
8. Exemplo 1
● Criar uma solução nova
● No projecto criado inserir 2 formulários
● mudar assembly name e root namespace do
projecto para “Infos.Teste.LoadForm”
9. Exemplo 1
● no formulário 1 acrescentar uma label, uma
textbox e um botão
● incluir a instrução “imports System.Reflection”
10. Exemplo 1
● no código do botão, incluir
[Assembly] - Defines an GetExecutingAssembly - Gets the
Assembly, which is a Assembly that the current code is running
reusable, versionable, and from.
self-describing building
block of a common CreateInstance - Locates a type from
language runtime this assembly and creates an instance of it
application.
using the system activator.
12. Exemplo 2
● criar um novo projecto na mesma solução
● mudar assembly name e root namespace do
novo projecto para
“Infos.Teste.FormCarregavel”
● criar um formulario nesse novo projecto
● nesse formulario incluir um botao com código
necessário para fechar form “Me.Close()”
13. Exemplo 2
● no primeiro formulário do projecto inicial
acrescentar mais uma label, caixa de texto e
botao
● incluir no novo botao o seguinte codigo
15. Exemplo 3
● no projecto inicial criar
– uma classe chamada Utilizador com as
propriedades nome (string), morada (string) e
datanascimento (datetime) e uma função chamada
getIdade que não recebe nenhum parametro
● no primeiro formulário do projecto inicial
acrescentar uma “RichTextBox” e um novo
botao
● incluir no codigo do novo botao o conteudo do
ficheiro codigo0401_01.txt
18. Exemplo 4
● Criar um novo formulario
chamado “FormDinamico”
● nesse form acrescentar
uma label, uma textbox,
um botao e um panel
● incluir no codigo do novo
form o conteudo do
ficheiro codigo0401_02.txt
19. Exemplo 4
● incluir no botao o seguinte codigo
21. Exemplo 5
● incluir no novo form um novo botao
● incluir no codigo do novo form o conteudo do
ficheiro codigo0401_03.txt
● incluir no botao o seguinte codigo