Uma interface é um tipo que contém membros que definem um conjunto de funcionalidades relacionadas. Afasta a utilização de uma classe da respetiva implementação, permitindo várias implementações diferentes ou o suporte de um comportamento genérico, como a formatação, a comparação ou a conversão.
A sintaxe de uma interface é semelhante à de uma classe ou de uma struct, exceto que os métodos e as propriedades aparecem apenas como assinatura e não é fornecido qualquer 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 têm de ser implementadas.
As interfaces podem conter métodos e propriedades de instância, entre outros membros
Para permitir que um objeto seja comparado com outro objeto, este tem de implementar a interface IComparable<T>.
Esta interface tem um único método que tem de ser implementado: int CompareTo(T other).
Existem três valores devolvidos possíveis para o método CompareTo:
Neste exercício vais trabalhar mais um pouco com carros de controlo remoto.
Foi desenvolvido um carro experimental e a pista de testes precisa de ser adaptada para suportar tanto os modelos de produção como os experimentais. Os dois tipos de carro já foram construídos e precisas de encontrar uma forma de lidar com ambos na pista de testes.
Além disso, os carros de produção começam a ter algum sucesso. O chefe de equipa faz questão de manter o espírito competitivo, publicando uma classificação dos carros de produção.
Adiciona 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
Adiciona 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
Implementa a interface IComparable<T> na classe ProductionRemoteControlCar. A ordem de ordenação predefinida dos carros deve ser a ordem crescente de vitórias.
Implementa o método estático TestTrack.GetRankedCars() para devolver os carros recebidos ordenados por ordem crescente do 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
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.