Uma interface é um tipo que contém membros que definem um grupo de funcionalidades relacionadas. Ela separa os usos de uma classe da implementação, o que permite várias implementações diferentes ou o suporte a algum comportamento genérico, como formatação, comparação ou conversão.
A sintaxe de uma interface é parecida com a de uma classe ou struct, exceto que os métodos e as propriedades aparecem apenas como assinatura, sem corpo.
public interface ILanguage
{
string LanguageName { get; set; }
string Speak();
}
public class ItalianTaveller : ILanguage, ICloneable
{
public string LanguageName { get; set; } = "Italiano";
public string Speak()
{
return "Ciao mondo";
}
public object Clone()
{
ItalianTaveller it = new ItalianTaveller();
it.LanguageName = this.LanguageName;
return it;
}
}
Todas as operações definidas pela interface precisam ser implementadas.
As interfaces podem conter métodos de instância e propriedades, entre outros membros.
Para permitir que um objeto seja comparado a outro objeto, ele precisa implementar a interface IComparable<T>.
Essa interface tem um único método que precisa ser implementado: int CompareTo(T other).
Há três valores de retorno possíveis para o método CompareTo:
Neste exercício, você vai trabalhar mais um pouco com carros de controle remoto.
Um carro experimental foi desenvolvido e a pista de testes precisa ser adaptada para lidar com os modelos de produção e experimental. Os dois tipos de carro já foram construídos e você precisa encontrar uma forma de lidar com ambos na pista de testes.
Além disso, os carros de produção estão começando a ter sucesso. O chefe da equipe quer manter o espírito competitivo publicando um ranking dos carros de produção.
Adicione um método à interface IRemoteControlCar para expor as implementações de Drive() dos dois tipos de carro.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Adicione uma propriedade à interface IRemoteControlCar para expor as implementações da propriedade DistanceTravelled dos dois tipos de carro.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Implemente a interface IComparable<T> na classe ProductionRemoteControlCar. A ordem de classificação padrão dos carros deve ser a ordem crescente de vitórias.
Implemente o método estático TestTrack.GetRankedCars() para retornar os carros recebidos ordenados em ordem crescente de número de vitórias.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.