C# 接口

接口

接口(Interfaces)是 C# 中实现抽象化的另一种方式。

interface 是一个完全的抽象类,它只能包含抽象方法和属性(具有空主体):

实例

// 接口
interface Animal 
{
  void animalSound(); // 接口方法(没有主体)
  void run(); // 接口方法(没有主体)
}

提示

在接口名称前加上字母 "I" 是一种好的编程习惯,这样可以使你和其他人更容易区分接口和类。

默认情况下,接口的成员是抽象的 (abstract) 和公共的 (public)。

注意:接口可以包含属性和方法,但不能包含字段。

要访问接口方法,接口必须由另一个类“实现”(有点像继承)。要实现接口,请使用 : 符号(就像继承一样)。接口方法的主体由“实现”类提供。请注意,实现接口时不必使用 override 关键字:

实例

// 接口  
interface IAnimal   
{  
  void animalSound(); // 接口方法(没有具体实现)  
}  
  
// Pig 类“实现”了 IAnimal 接口  
class Pig : IAnimal   
{  
  public void animalSound()   
  {  
    // 在这里提供 animalSound() 的具体实现  
    Console.WriteLine("猪说:wee wee");  
  }  
}  
  
class Program   
{  
  static void Main(string[] args)   
  {  
    Pig myPig = new Pig();  // 创建一个 Pig 对象  
    myPig.animalSound();  
  }  
}

亲自试一试

关于接口的注意事项:

  • 抽象类一样,接口不能用于创建对象(在上面的例子中,不可能在 Program 类中创建“IAnimal”对象)
  • 接口方法没有主体 - 主体由“实现”类提供
  • 在实现接口时,您必须重写其所有方法
  • 接口可以包含属性和方法,但不能包含字段/变量
  • 接口成员默认是抽象的 (abstract) 和公共的 (public)
  • 接口不能包含构造函数(因为它不能用于创建对象)

为什么以及何时使用接口?

1)实现安全性——隐藏某些细节,只显示对象(界面)的重要细节。

2)C# 不支持“多重继承”(一个类只能继承一个基类)。不过,可以用接口来实现,因为类可以实现多个接口。注意:要实现多个接口,请用逗号分隔它们(请参见下面的例子)。