Quando falamos em uma Interface, falamos em um Contrato com Métodos, Propriedades, Eventos e tudo o mais que a Interface possa exigir para seu uso.
É importante falarmos também que apenas Classes é que implementam as Interfaces e as implementações das Interfaces são sempre Públicas.
Em nossos objeto de Usuário temos a implementação de 2 interfaces: IComparable<Usuario>, INotifyPropertyChanged.
Observemos que, ao contrário dos exemplos anteriores, os métodos de recuperação de Interface retorna o tipo (type) da interface.
Para este post, será necessário a utilização da classe (Usuario) descrita no post (Reflection Parte 2 – Construtores)
Recuperando todas as Interfaces
C#
// Cria Objetos Type meuTipo; PropertyInfo[] properties; Type[] interfacesType; // Recupera o Tipo Desejado meuTipo = typeof(Usuario); // Recupera as Propriedades interfacesType = meuTipo.GetInterfaces();
VB.Net
' Cria Objetos Dim meuTipo As Type Dim interfacesType As Type() ' Recupera o Tipo Desejado meuTipo = GetType(Usuario) ' Recupera as Propriedades interfacesType = meuTipo.GetInterfaces()
Recuperando uma (01) Interface Específica
C#
// Cria Objetos
Type meuTipo;
PropertyInfo[] properties;
Type iComparableInterfaceType;
Type iNotifyPropertyChangedType;
// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);
// Recupera as Propriedades
iComparableInterfaceType = meuTipo.GetInterface("IComparable`1");
iNotifyPropertyChangedType = meuTipo.GetInterface("INotifyPropertyChanged");
VB.Net
' Cria Objetos
Dim meuTipo As Type
Dim iComparableInterfaceType As Type
Dim iNotifyPropertyChangedType As Type
' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)
' Recupera as Propriedades
iComparableInterfaceType = meuTipo.GetInterface("IComparable`1")
iNotifyPropertyChangedType = meuTipo.GetInterface("INotifyPropertyChanged")
Usando uma Interface para Executar um Método
Com uma interface em mãos, podemos executar algumas funções interessantes. Neste exemplo iremos abordar a execução de um método da interface, mas, você pode explorar os recursos de recuperar Propriedades e outras funcionalidades.
C#
// Cria Objetos
object ehIgual;
Type meuTipo;
PropertyInfo[] properties;
Type iComparableInterfaceType;
Type iNotifyPropertyChangedType;
MethodInfo metodoDeComparacao;
Usuario UsuarioI;
Usuario UsuarioII;
// Cria Usuários para Comparação
UsuarioI = new Usuario("Guilherme Bacellar", 26, new DateTime(1982, 12, 10));
UsuarioII = new Usuario("Guilherme Bacellar", 36, new DateTime(1970, 12, 10));
// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);
// Recupera as Propriedades
iComparableInterfaceType = meuTipo.GetInterface("IComparable`1");
// Recupera 1 dos Métodos da Interface
metodoDeComparacao = iComparableInterfaceType.GetMethod("CompareTo");
// Executa a Comparação
ehIgual = metodoDeComparacao.Invoke(UsuarioI, new object[] {UsuarioII});
VB.Net
' Cria Objetos
Dim ehIgual As Object
Dim meuTipo As Type
Dim properties As PropertyInfo
Dim iComparableInterfaceType As Type
Dim iNotifyPropertyChangedType As Type
Dim metodoDeComparacao As MethodInfo
Dim UsuarioI As Usuario
Dim UsuarioII As Usuario
' Cria Usuários para Comparação
UsuarioI = New Usuario("Guilherme Bacellar", 26, New DateTime(1982, 12, 10))
UsuarioII = New Usuario("Guilherme Bacellar", 36, New DateTime(1970, 12, 10))
' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)
' Recupera as Propriedades
iComparableInterfaceType = meuTipo.GetInterface("IComparable`1")
' Recupera 1 dos Métodos da Interface
metodoDeComparacao = iComparableInterfaceType.GetMethod("CompareTo")
' Executa a Comparação
ehIgual = metodoDeComparacao.Invoke(UsuarioI, New Object() {UsuarioII})
Em nosso exemplo, o Método (CompareTo) será executado para comparar os Nomes dos Usuários. E deverá retornar (0) na variável (ehIgual) indicando que os nomes são iguais.
Bom, neste artigo é só.
Comece a explorar as variações do uso das Interfaces com base neste exemplo e se quiser vá fundo no assunto.
Não posso escrever tudo sobre Reflection em alguns artigos, mas, posso dar a chave que abre a porta.
No próximo vamos falar de Atributos.
Posts Relacionados:



Be the first to start a conversation