Temos uma interface. As classes que implementam esse interface, por obrigação, tem que implementar o método.
public interface IAutenticavel
{
bool Autenticar(string senha);
}
public abstract class FuncionarioAutenticavel : Funcionario, IAutenticavel
{
public string Senha { get; set; }
//Construtor
public bool Autenticar(string senha)
{
return Senha == senha;
}
}
public class ParceiroComercial : IAutenticavel
{
public string Senha { get; set; }
public bool Autenticar(string senha)
{
return Senha == senha;
}
}
A Classe SistemaInterno receberá no parâmetro um objeto que é implementado por uma interface.
public class SistemaInterno
{
public bool Logar(IAutenticavel funcionario, string senha)
{
bool usuarioAutenticado = funcionario.Autenticar(senha);
if(usuarioAutenticado)
{
Console.WriteLine("Bem-vindo ao sistema!");
return true;
}
else
{
Console.WriteLine("Senha incorreta!");
return false;
}
}
}
Faria diferença na minha aplicação se eu tivesse vários métodos Logar só que com assinaturas diferentes? Exemplo:
public class SistemaInterno
{
public bool Logar(Funcionario funcionario, string senha)
{
bool usuarioAutenticado = funcionario.Autenticar(senha);
if(usuarioAutenticado)
{
Console.WriteLine("Bem-vindo ao sistema!");
return true;
}
else
{
Console.WriteLine("Senha incorreta!");
return false;
}
}
public bool Logar(ParceiroComercial parcom, string senha)
{
bool usuarioAutenticado = funcionario.Autenticar(senha);
if(usuarioAutenticado)
{
Console.WriteLine("Bem-vindo ao sistema!");
return true;
}
else
{
Console.WriteLine("Senha incorreta!");
return false;
}
}
}