Nesta aula iremos aprender como utilizar uma interface, veremos que utilizando a interface iremos conseguir fazer coisas muito mais poderosas utilizando muito pouco código.
Interface é uma classe que possui atributos e métodos somente com a assinatura dos métodos.A implementação desta interface será feita somente nas classes que a implementar.
Para criar uma nova interface no projeto usando Visual Studio :
Um exemplo de interface para gravar dados de Cliente e Usuario
//Foi criado a Interface com os atributos e método Gravar() sem implementação.
namespace Classes
{
public interface IPessoa
{
void SetNome(string nome);
void SetTelefone(string nome);
void SetCPF(string nome);
void Gravar();
}
}
Vamos refatorar a Classe Cliente e Usuario das aulas anteriores, criando uma classe Base para inserir os atributos genéricos das Classes Cliente e Usuario.
A classe Base será responsavel por implementar a interface com o método Gravar(). Utilizamos o mesmo símbolo da herança para fazer a representação de implementação da interface, que são os dois pontos ":"
// A classe Base implementa a interface IPessoa
namespace Classes
{
public class Base : IPessoa
{
public Base(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Base(){}
public string Nome;
public string Telefone;
public string CPF;
public virtual void Gravar()
{
var dados = this.Ler();
dados.Add(this);
if (File.Exists(diretorio()))
{
StreamWriter r = new StreamWriter(diretorioComArquivo());
r.WriteLine("nome;telefone;cpf");
foreach(Base b in dados)
{
var linha = b.Nome + ";" + b.Telefone + ";" + b.CPF + ";";
r.WriteLine(linha);
}
r.close;
}
}
public string diretorioComArquivo()
{
return ConfigurationManager.AppSettings["CaminhoArquivo"] + this.GetType().Name + ".txt";
}
public static List< IPessoa> Ler()
{
var dados = new List< Base>();
if (File.Exists(diretorioComArquivo))
{
using(StreamReader arquivo = File.OpenText(diretorioComArquivo()))
{
string linha;
int i = 0;
while (linha = arquivo.ReadLine()) !=null)
{
i++;
if (i == 1) continue;
var baseArquivo = linha.Split(';');
//Cria a instancia da Classe que estou passando (Usuario ou Cliente)
var b = (IPessoa)Activator.CreateInstance(this.GetType());
b.SetNome(baseArquivo[0]);
b.SetTelefone(baseArquivo[1]);
b.SetCPF(baseArquivo[2]);
dados.Add(b);
}
}
}
}
}
}
Na classe Cliente, vamos herdar da classe Base
namespace Classes
{
public class Cliente : Base
{
public Cliente(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Cliente(){}
}
}
Na classe Usuario, vamos também herdar da classe Base
namespace Classes
{
public class Usuario : Base
{
public Usuario(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Usuario(){}
}
}
No programa Principal (main) iremos criar as instância das classes Clientes e Usuarios e as duas classes utilizam o método Gravar() da classe Base, que implementou a Interface IPessoa.
namespace console_app
{
class Program
{
static void Main(string[] args)
{
//grava dados no arquivo de clientes.txt
Cliente c = new Cliente();
c.Nome = "Cliente";
c.Telefone = "2541";
c.CPF = "3333";
c.Gravar();
foreach(Cliente cl in new Cliente().Ler())
{
Console.WriteLine(cl.Nome);
Console.WriteLine(cl.Telefone);
Console.WriteLine(cl.CPF);
}
//grava dados no arquivo de Usuarios.txt
Usuario u = new Usuario();
u.Nome = "Usuario";
u.Telefone = "25555";
u.CPF = "33666";
u.Gravar();
foreach(Usuario us in new Usuario().Ler())
{
Console.WriteLine(us.Nome);
Console.WriteLine(us.Telefone);
Console.WriteLine(us.CPF);
}
}
}
}
Nesta aula iremos aprender como utilizar uma interface, veremos que utilizando a interface iremos conseguir fazer coisas muito mais poderosas utilizando muito pouco código.
Interface é uma classe que possui atributos e métodos somente com a assinatura dos métodos.A implementação desta interface será feita somente nas classes que a implementar.
Para criar uma nova interface no projeto usando Visual Studio :
Um exemplo de interface para gravar dados de Cliente e Usuario
//Foi criado a Interface com os atributos e método Gravar() sem implementação.
namespace Classes
{
public interface IPessoa
{
void SetNome(string nome);
void SetTelefone(string nome);
void SetCPF(string nome);
void Gravar();
}
}
Vamos refatorar a Classe Cliente e Usuario das aulas anteriores, criando uma classe Base para inserir os atributos genéricos das Classes Cliente e Usuario.
A classe Base será responsavel por implementar a interface com o método Gravar(). Utilizamos o mesmo símbolo da herança para fazer a representação de implementação da interface, que são os dois pontos ":"
// A classe Base implementa a interface IPessoa
namespace Classes
{
public class Base : IPessoa
{
public Base(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Base(){}
public string Nome;
public string Telefone;
public string CPF;
public virtual void Gravar()
{
var dados = this.Ler();
dados.Add(this);
if (File.Exists(diretorio()))
{
StreamWriter r = new StreamWriter(diretorioComArquivo());
r.WriteLine("nome;telefone;cpf");
foreach(Base b in dados)
{
var linha = b.Nome + ";" + b.Telefone + ";" + b.CPF + ";";
r.WriteLine(linha);
}
r.close;
}
}
public string diretorioComArquivo()
{
return ConfigurationManager.AppSettings["CaminhoArquivo"] + this.GetType().Name + ".txt";
}
public static List< IPessoa> Ler()
{
var dados = new List< Base>();
if (File.Exists(diretorioComArquivo))
{
using(StreamReader arquivo = File.OpenText(diretorioComArquivo()))
{
string linha;
int i = 0;
while (linha = arquivo.ReadLine()) !=null)
{
i++;
if (i == 1) continue;
var baseArquivo = linha.Split(';');
//Cria a instancia da Classe que estou passando (Usuario ou Cliente)
var b = (IPessoa)Activator.CreateInstance(this.GetType());
b.SetNome(baseArquivo[0]);
b.SetTelefone(baseArquivo[1]);
b.SetCPF(baseArquivo[2]);
dados.Add(b);
}
}
}
}
}
}
Na classe Cliente, vamos herdar da classe Base
namespace Classes
{
public class Cliente : Base
{
public Cliente(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Cliente(){}
}
}
Na classe Usuario, vamos também herdar da classe Base
namespace Classes
{
public class Usuario : Base
{
public Usuario(string nome, string telefone, string cpf)
{
this.Nome = nome;
this.Telefone = telefone;
this.CPF = cpf;
}
public Usuario(){}
}
}
No programa Principal (main) iremos criar as instância das classes Clientes e Usuarios e as duas classes utilizam o método Gravar() da classe Base, que implementou a Interface IPessoa.
namespace console_app
{
class Program
{
static void Main(string[] args)
{
//grava dados no arquivo de clientes.txt
Cliente c = new Cliente();
c.Nome = "Cliente";
c.Telefone = "2541";
c.CPF = "3333";
c.Gravar();
foreach(Cliente cl in new Cliente().Ler())
{
Console.WriteLine(cl.Nome);
Console.WriteLine(cl.Telefone);
Console.WriteLine(cl.CPF);
}
//grava dados no arquivo de Usuarios.txt
Usuario u = new Usuario();
u.Nome = "Usuario";
u.Telefone = "25555";
u.CPF = "33666";
u.Gravar();
foreach(Usuario us in new Usuario().Ler())
{
Console.WriteLine(us.Nome);
Console.WriteLine(us.Telefone);
Console.WriteLine(us.CPF);
}
}
}
}