Una interfaz es un tipo que contiene miembros que definen un grupo de funcionalidad relacionada. Distancia los usos de una clase de la implementación, lo que permite múltiples implementaciones distintas o admitir un 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, salvo que los métodos y las propiedades aparecen solo como la firma y no se proporciona ningún 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 de instancia y propiedades, entre otros miembros.
Para que un objeto se pueda comparar con otro objeto, debe implementar la interfaz IComparable<T>.
Esta interfaz tiene un único método que hay que implementar: int CompareTo(T other).
El método CompareTo puede devolver tres valores distintos:
En este ejercicio vas a seguir trabajando con los coches teledirigidos.
Se ha desarrollado un coche experimental y la pista de pruebas debe adaptarse para manejar tanto los modelos de producción como los experimentales. Ya se han construido los dos tipos de coche y tienes que encontrar la manera de lidiar con ambos en la pista de pruebas.
Además, los coches de producción están empezando a tener cierto éxito. El jefe del equipo está muy interesado en mantener el espíritu competitivo publicando una clasificación de los coches de producción.
Añade un método a la interfaz IRemoteControlCar para exponer las implementaciones de Drive() de los dos tipos de coche.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Añade una propiedad a la interfaz IRemoteControlCar para exponer las implementaciones de la propiedad DistanceTravelled de los dos tipos de coche.
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 coches debe ser el orden ascendente de victorias.
Implementa el método estático TestTrack.GetRankedCars() para que devuelva los coches pasados ordenados de forma ascendente según el 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.