Una interfaz es un tipo que contiene miembros que definen un grupo de funcionalidad relacionada. Separa los usos de una clase de su implementación, lo que permite múltiples implementaciones diferentes o el soporte de algún comportamiento genérico, como el formato, la comparación o la conversión.
La sintaxis de una interfaz es similar a la de una clase o una estructura, con la diferencia de que los métodos y las propiedades aparecen solo como la firma y no se proporciona un cuerpo.
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 las operaciones definidas por la interfaz deben implementarse.
Las interfaces pueden contener métodos y propiedades de instancia, entre otros miembros.
Para permitir que un objeto se compare con otro objeto, este debe implementar la interfaz IComparable<T>.
Esta interfaz tiene un único método que es necesario implementar: int CompareTo(T other).
El método CompareTo puede devolver tres valores posibles:
En este ejercicio vas a trabajar un poco más con los autos de control remoto.
Se ha desarrollado un auto experimental y la pista de pruebas necesita adaptarse para aceptar tanto los modelos de producción como los experimentales. Los dos tipos de auto ya están construidos y necesitas encontrar la manera de que ambos funcionen en la pista de pruebas.
Además, los autos de producción están empezando a tener algo de éxito. Al jefe del equipo le interesa mantener el espíritu competitivo publicando una clasificación de los autos de producción.
Agrega un método a la interfaz IRemoteControlCar para exponer las implementaciones de Drive() para los dos tipos de auto.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Agrega una propiedad a la interfaz IRemoteControlCar para exponer las implementaciones de la propiedad DistanceTravelled para los dos tipos de auto.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Implementa la interfaz IComparable<T> en la clase ProductionRemoteControlCar. El orden de clasificación predeterminado de los autos debe ser el orden ascendente de victorias.
Implementa el método estático TestTrack.GetRankedCars() para que devuelva los autos que recibe ordenados de forma ascendente por número de victorias.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.