一,接口是什么
首先给出一个普通接口的例子:
interface ICooking
{
void Cook();
}
上面定义了一个叫ICooking
的接口,其中只包含了一个名为Cook()
的方法,该方法的返回值类型为void。
总的来说,形如:interface ... {...}
的,就是C#中的接口。
二,接口做了什么
接口定义了可以被类(classes)和结构(structs)实现的合同。
接口可以包含:方法(methods)、属性(properties)、事件(events)、索引器(indexers)。
接口不提供 其成员的定义,它只负责对成员的声明。
三,为什么需要接口
接口的主要作用:1,实现‘功能的需求’和‘功能的实现’的分离;2,提高一层抽象,让使用者能忽略底层细节去使用功能。
通过接口设计出你想要实现的功能,然后再后续的类或结构中实现,能让开发进行得井井有条。同时,接口中的方法必须尽数实现,这也避免了方法的遗漏,确保了对‘功能的需求’的完全满足。
四,接口的使用
1,接口的创建
interface 你的接口名
{
接口的成员;
}
按照上面的语法,将中文替换成对应的东西,你就获得了一个接口。
2,接口的继承
interface 父母接口
{
父母接口的成员;
}
interface 子女接口 : 父母接口
{
子女接口的成员;
}
按照上面的语法,你获得了两个接口,其中第二个接口继承了第一个接口。
3,接口的实现
1)继承一个接口并实现
interface IGreetings
{
void SayHi();
}
class Tom : IGreetings
{
public void SayHi()
{
//Do something
}
}
以上定义了一个叫IGreetings
的接口。该接口包含了一个SayHi()
方法,这个方法在接口的子类Tom
中被实现了。
2)继承多个接口并实现
interface Interface1
{
void Method1();
}
interface Interface2
{
void Method2();
}
class Implementer: Interface1, Interface2
{
public void Method1() {}
public void Method2() {}
}
以上定义了两个接口,分别叫Interface1
和Interface2
。类Implementer
同时继承了两个接口,故该类必须实现Interface1
和Interface2
的所有方法。
3) 显式接口成员实现
在上面的接口实现中,接口的方法们都是用接口子类的公共成员(public member)实现的。在C#中,我们也可以使用显示接口成员实现(explicit interface member implementation)来避免让子类的成员变得公共。
//承接上例
class Implementer2: Interface1, Interface2
{
void Interface1.Method1() {}
void Interface2.Method2() {}
}
显示接口成员实现的做法就是仿照上面的例子,使用完整的接口成员名。
显示接口成员只能通过对应的接口类型才能访问到。比如:
//承接上例
Implementer2 x = new Implementer2();
x.Method1(); //报错,没有Method1
Interface1 y = x;
y.Method1(); //可行