接口如何在 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