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# 不支持“多重继承”(一个类只能继承自一个基类)。然而,这可以通过接口来实现,因为一个类可以实现多个接口。注意: 要实现多个接口,请用逗号将它们分开(请参阅下面的示例)。