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

更新于:2021年5月19日

475 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告