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”开头,这可以帮助您和其他开发人员更容易地记住它是一个接口而不是一个类。
默认情况下,接口的成员是 abstract
和 public
。
**注意:** 接口可以包含属性和方法,但不能包含字段。
要访问接口方法,必须通过另一个类“实现”(类似于继承)接口。要实现接口,使用 :
符号(就像继承一样)。接口方法的方法体由“实现”类提供。请注意,在实现接口时,不需要使用 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”对象)。
- 接口方法没有方法体 - 方法体由“实现”类提供。
- 在实现接口时,必须覆盖所有方法。
- 接口可以包含属性和方法,但不能包含字段/变量。
- 接口成员默认是
abstract
和public
。 - 接口不能包含构造函数(因为它不能用于创建对象)。
为什么要使用接口?什么时候使用接口?
1) 实现安全性 - 隐藏某些细节,只显示对象的必要信息(接口)。
2) C# 不支持“多重继承”(一个类只能继承自一个基类)。但是,可以通过接口实现多重继承,因为类可以 **实现** 多个接口。**注意:** 要实现多个接口,请用逗号分隔它们(请参阅下面的示例)。