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