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