C#设计模式专题之一:接口型模式介绍

来源:本站原创  作者:开拓者
摘要:接口描述了类在交互过程中的期望行为和不期望的行为。接口与纯抽象类很类似,接口定义了它应该完成的功能,但是并没有实现这些功能。接口与委托也很类似,当然,委托仅仅对每个方法规范了方法参数以及返回类型。 委托也是类型,因此一个接口无法包容一个委托并把它当作一个成员…

接口描述了类在交互过程中的期望行为和不期望的行为。接口与纯抽象类很类似,接口定义了它应该完成的功能,但是并没有实现这些功能。接口与委托也很类似,当然,委托仅仅对每个方法规范了方法参数以及返回类型。

委托也是类型,因此一个接口无法包容一个委托并把它当作一个成员。然而委托类型的变量和标记了event关键字的变量可以出现在接口中。

除了方法和事件,接口还可以包容索引器和属性。这些内容的语法非常重要,因为客户可以通过使用这些成员类型以及使用反射,检测并了解实现类(实现类指实现了接口的类)的行为。

有关接口的要点陈述如下:

*、一个接口定义了一个合约;

*、接口可以包容方法、属性、事件,以及索引器;

*、在一个接口声明中,我们可以声明零个或者多个成员;

*、所有接口成员的默认访问类型都是public;

*、如果在接口成员声明中包括了任何修饰符,那么会产生一个编译时错误;

*、与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。

1、接口与抽象类

>>>(C#语言的抽象类与接口之间的三种不同之处)

在使用上,一个没有提供非抽象方法的抽象类与一个接口是类似的。然而,我们需要注意以下几点:

*、一个类可以实现任意多个接口,但是最多只能对一个抽象类进行子类化。

*、一个抽象类可以包括非抽象方法,而一个接口的所有方法在效果上都是抽象的。

*、一个抽象类可以声明并使用变量,而一个接口不能。

*、一个抽象类中的方法的访问修饰符可以是public、internal、protected、protected internal或者是private.而接口成员的访问修饰符在默认情况下都是public,而且,在声明接口成员时,不允许使用访问修饰符(甚至不允许使用public访问修饰符)。

*、一个抽象类可以定义构造函数,而一个接口不能。

2、接口与委托

>>>(一个C#接口可以包容方法、C#属性[property]、以及索引器[index]。一个接口也可以包容事件,但是不能包容委托。为什么?)

我们可以简单地给出以下解释:

delegate关键字引入了一个新的类型,而event关键字引入了一个新的成员。一个接口声明规范了成员,而不是类型,因此事件可以归入接口,而委托不能归入接口。

而详细解释是:

event关键字声明了一个特定类型的字段(一个“事件”),规范了其类型(必须是一个委托类型)及其名称。C#限制了对事件的访问,客户不能使用事件类型(其委托类型)的所有行为。客户只能使用委托所提供的+=和-=行为。这种限制所产生的结果之一是:只有声明类可以调用(或激发)一个事件。但是,只要使某个类包容一个public事件成员,一个接口客户的组成类就可以实例化上述那个类。因为事件可以是一个类的接口的标准组成部分,因此我们有充分的理由让接口包括事件。

【相关文章】好搜一下
使用Visual Studio 2010空白解决方案的三个理由

使用Visual Studio 2010空白

在Visual Studio 2010(包括以前的版本中)都提供了很多现成的解决…