C# 界面


接口

另一种实现方式抽象在C#中,就是接口。

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

示例

// interface
interface Animal 
{
  void animalSound(); // interface method (does not have a body)
  void run(); // interface method (does not have a body)
}

在接口的开头以字母 "I" 开头被认为是一种很好的做法,因为这样可以让您自己和其他人更容易记住它是一个接口而不是一个类。

缺省情况下,接口的成员有abstractpublic

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

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

示例

// Interface
interface IAnimal 
{
  void animalSound(); // interface method (does not have a body)
}

// Pig "implements" the IAnimal interface
class Pig : IAnimal 
{
  public void animalSound() 
  {
    // The body of animalSound() is provided here
    Console.WriteLine("The pig says: wee wee");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
  }
}

亲自试一试 »

接口注意事项:

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

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

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

2)C#不支持"multiple inheritance"(一个类只能继承一个基类)。然而,它可以通过接口来实现,因为类可以实施多个接口。笔记:要实现多个接口,请用逗号分隔它们(请参见下面的示例)。