C# 中的接口是如何工作的?
接口定义了一个将由类或结构实现的契约。它可以包含方法、属性、事件和索引器。接口类似于类,但它不包含任何数据,只指定其可以执行的行为(更准确地说,实现它的类可以执行的行为)。
一个类可以实现一个或多个接口。要实现接口成员,类应该具有与接口成员相同的方法定义的公共成员,即相同名称和签名。
例如,`IComparer` 是在 `System.Collections` 命名空间中定义的接口,它定义了比较两个对象的方法的契约。`Car` 类实现了 `IComparer` 接口。
public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }
接口上的所有成员都是隐式抽象的,并且没有任何实现细节。所有接口成员都是公共的。不能对接口成员使用访问修饰符。实现接口的类必须提供实现接口的公共方法。
接口可以扩展其他接口,例如:
public interface IPerformer { void Perform(); } public interface ISinger : IPerformer{ void Sing(); }
接口允许您在一个类中包含来自多个源的行为。由于 C# 不像 C++那样允许多重继承,接口是 C# 中实现多重继承的一种方式。
接口的一个缺点是,当您使用它们公开 API 时,它们不如类灵活。当您更改接口的契约时,实现该接口的所有类都会中断,需要更新以实现该接口。
示例
using System; class Program{ static void Main(){ var carOne = new Car { Name = "Honda", Speed = 100 }; var carTwo = new Car { Name = "Toyota", Speed = 70 }; carOne.Drive(); carTwo.Drive(); } } public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }
输出
Honda: 100 Toyota: 70
广告