Em determinadas situações temos métodos com nomes e ações parecidas, mais que são de tipos diferentes.
Para evitar o copiar e colar (pode ser perigoso, acredite!) de métodos podemos criar uma interface, com métodos genéricos, fazendo com que nossas classes herdem dessa interface, implementando assim esses métodos (e repetindo-os, apenas trocando o tipo).
A Listagem 1 ilustra a criação dessa interface.
Listagem 1. Interface com métodos genéricos
public interface IMetodos<T> where T : new() { string Excluir<P>(P id); int Inserir(T objModel); List<T> Consultar(T objModel); string Atualizar<P>(T objModel); }
Definimos um nome qualquer para a interface, onde o T (o T indica que é um tipo de dado do Framework, sem especificar qual) herda da palavra-chave new, indicando que é uma instância da interface. Note que a interface tem como parâmetro um tipo, definido por T.
Na Listagem 2 conferimos uma classe Produtos, herdando de nossa interface.
p>Listagem 2. Classe herdando a interface criada e aplicando os métodos genéricos
public class ModeloProdutos { } public class Produtos : Conexao.IMetodos<ModeloProdutos> { public string Excluir<P>(P id) { throw new NotImplementedException(); } public int Inserir(ModeloProdutos objModel) { throw new NotImplementedException(); } public List<ModeloProdutos> Consultar(ModeloProdutos objModel) { throw new NotImplementedException(); } public string Atualizar<P>(ModeloProdutos objModel) { throw new NotImplementedException(); } }
Note que antes da classe Produtos criamos outra classe, a ModeloProdutos, que nada mais é do que o tipo que a interface espera, para que a implementação funcione sem erros.
Os métodos foram gerados automaticamente, conforme é ilustrado pela Figura 1.
Figura 1. Gerando os métodos implementados pela interface
Apenas lembrando que se uma classe herda de uma interface, ele deve, obrigatoriamente, conter os métodos implementados pela interface.
Assim finalizo a quick tip. Muito obrigado a todos! Um abraço, e até o próximo artigo.