Post on 08-Apr-2018
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
1/17
.NET POO C# .NET
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
2/17
Objetivo
Viso Geral
Utilizando a Classe Assembly
Classe AssemblyInfo
Classe Type
Classe MemberInfo
Concluso
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
3/17
Capacitar o aluno no uso dos principais recursos da API
Reflection oferecidos pela plataforma .NET.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
4/17
Um dos maiores benefcios do .NET Framework a
riqueza de informao do tipo, disponvel em tempo de
execuo;
O sistema de reflexo possibilita ao desenvolvedor navegar
e questionar este tipo de informao;
Este recurso permite criar sistemas muito dinmicos e
arquiteturas de aplicaes mais plugveis.
O namespace empregado System.Reflection.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
5/17
Vamos compreender um pouco mais sobre os Assemblies e
Modules:
Um assembly um container lgico com diferentes partesdos dados de CLR necessrio para executar o cdigo:
Metadados de Assembly;
Metadados de Tipo; Cdigo (Microsoft Intermediate Language Code);
Recursos.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
6/17
Organizao de um Assembly:
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
7/17
Como obter informaes sobre o assembly que est
sendo executado atualmente:
Assembly a = Assembly.GetExecutingAssembly();
Console.WriteLine("Full Name: {0}", a.FullName);
Console.WriteLine("Location: {0}", a.Location);Console.WriteLine("Only Reflection? {0}", a.ReflectionOnly);
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
8/17
Como obter informaes sobre os mdulos que
compem o assembly:
Assembly a = Assembly.GetExecutingAssembly();
Module[] modules = a.GetModules();
foreach (Module m in modules){
Console.WriteLine("Module Name: {0}", m.Name);
}
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
9/17
H vrios atributos sobre um assembly que no esto
disponveis para leitura. Estes atributos incluem:
Informaes de direito de cpia; Informaes sobre o fornecedor;
A cultura;
Arquivo de chave.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
10/17
Podemos definir no arquivo AssemblyInfo.cs de seu projeto
alguns atributos em tempo de design:
Abaixo definimos o nome da empresa:
[assembly: AssemblyCompany("Faesa, Inc")]
Abaixo definimos os direitos de cpia:
[assembly: AssemblyCopyright("Todos os direitos reservados")]
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
11/17
O desenvolvedor pode buscar o tipo do objeto de vrias
formas tomando seu acesso pelo uso da classe Type:
Classe Assembly;
Classe Module;
Instncia de uma classe;
Usando a palavra-chave typeof no C# ou funo
GetType no Visual Basic .NET.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
12/17
Exemplificando o uso da classe Type, temos:
A partir da instncia de um objeto:
Pessoa p = new Pessoa();
Type pType = p.GetType();
Utilizando a palavra-chave typeof:
Type pType= typeof(Pessoa)
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
13/17
Como obter os dados de uma classe?
Type t = typeof(String);
Console.WriteLine("Type: {0}", t.Name);
Console.WriteLine("Namespace: {0}", t.Namespace);
Console.WriteLine("FullName: {0}", t.FullName);
Console.WriteLine("Is Class?: {0}", t.IsClass);
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
14/17
Como obter as informaes de campos, mtodo e
propriedades de uma classe?
Type t = typeof(String);
foreach (MemberInfo m in t.GetMembers()) {
Console.WriteLine("{0}: {1}", m.MemberType, m.Name);
}
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
15/17
MemberInfo
MethodInfo PropertyInfo FieldInfo
Informaes de
Mtodo
Informaes de
Propriedade
Informaes de
Campo
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
16/17
O namespace System.Reflection inclui classes para
interrogar os metadados sobre os assemblies, mdulos e
tipos no CLR;
Um nmero de atributos especficos do assembly podem ser
usados para especificar informao sobre um assembly,
assim como os dados de copyright, verso e marca
registrada; Um nmero de classes que so usadas para obter
informao derivam da classe MemberInfo, isso inclui
PropertyInfo, MethodInfo e FieldInfo.
8/7/2019 .NET - POO - C# .NET - Aula 07 - Reflection
17/17
.NET POO C# .NET