接口在 C# 中如何工作?

csharpserver side programmingprogramming更新于 2025/4/28 19:22:17

接口定义将由类或结构实现的契约。它可以包含方法、属性、事件和索引器。接口类似于类,不同之处在于它不包含任何数据,只指定它可以执行的行为(或者更准确地说,实现它的类可以执行的行为)。

类可以实现一个或多个接口。要实现接口成员,类应该有一个公共成员,其方法定义与接口成员相同,即名称和签名相同。

例如,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

相关文章