C# 接口

接口

在 C# 中实现抽象的另一种方法是使用接口。

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

实例

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

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

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

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

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

实例

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

// Pig "实现"了 IAnimal 接口
class Pig : IAnimal 
{
  public void animalSound() 
  {
    // 这里提供了 animalSound() 的主体
    Console.WriteLine("The pig says: wee wee");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Pig myPig = new Pig();  // 创建 Pig 对象
    myPig.animalSound();
  }
}

运行实例 »

接口说明:

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

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

1) 为了实现安全性-隐藏某些细节,只显示对象(接口)的重要细节。

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


多个接口

要实现多个接口,请用逗号分隔它们:

实例

interface IFirstInterface 
{
  void myMethod(); // 接口方法
}

interface ISecondInterface 
{
  void myOtherMethod(); // 接口方法
}

// 实现多个接口
class DemoClass : IFirstInterface, ISecondInterface 
{
  public void myMethod() 
  {
    Console.WriteLine("Some text..");
  }
  public void myOtherMethod() 
  {
    Console.WriteLine("Some other text...");
  }
}

class Program 
{
  static void Main(string[] args)
  {
    DemoClass myObj = new DemoClass();
    myObj.myMethod();
    myObj.myOtherMethod();
  }
}

运行实例 »