接口是一种类型,它包含的成员定义了一组相关的功能。它将类的使用与实现分离开来,从而允许多种不同的实现,或者支持某些泛型行为,例如格式化、比较或转换。
接口的语法与类或结构体类似,不同之处在于方法和属性只以签名形式出现,不提供方法体。
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;
}
}
接口定义的所有操作都必须实现。
接口可以包含实例方法、属性以及其他成员。
要让一个对象能够与另一个对象进行比较,它必须实现IComparable<T>接口。
这个接口有一个需要实现的方法:int CompareTo(T other)。
CompareTo方法有三种可能的返回值:
在这个练习中,你将进一步研究遥控车。
一款实验车已经开发出来,测试赛道也需要改造,以便同时容纳量产车和实验车型。这两种车都已经造好,你需要找到一种方法,让它们都能在同一条测试赛道上运行。
此外,量产车开始取得一些成绩。车队老板希望通过公布量产车的排名来保持竞争氛围。
请为IRemoteControlCar接口添加一个方法,用来暴露两种车型的Drive()实现。
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
请为IRemoteControlCar接口添加一个属性,用来暴露两种车型的DistanceTravelled属性的实现。
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
请在ProductionRemoteControlCar类中实现IComparable<T>接口。小车的默认排序顺序应当是按获胜次数升序排列。
实现静态方法TestTrack.GetRankedCars(),返回传入的小车,并按获胜次数升序排列。
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1