一、接口引用
接口是表示一组函数成员而不实现成员的引用类型。其他类型——类和结构可以实现接口。
我们不能直接通过类对象的成员访问接口。然而,我们可以通过把类对象引用强制转换为接口类型来获取指向接口的引用。一旦有了接口的的引用,我们可以使用点号来调用接口的方法。
如下代码的声明了接口以及一个实现它的类。Main中的代码创建了类的对象,并通过类对象调用实现方法。同时创建了接口类型的变量,强制把类对象的引用转换成接口类型的引用,并通过接口的引用来调用实现的方法。
这里为了更清楚看到变量的值和类型,我给添加了监视窗口,如下
程序运行结果如下:
二、接口查询(QueryInterface)
一个类可以有多个接口,声明了接口变量并且指向一个对象的时候,这个变量只能使用该接口内的方法和属性,而不能访问其他接口中的方法和属性。但接口查询很方便的让我们在一个类中的不同接口间进行切换。
如下代码,定义了两个不同的接口,以及实现了它们的一个类Cat。在Main函数中,通过接口引用调用了IVoice中定义的方法,之后又通过as运算符进行接口的切换,调用了IFavoriteFood中定义的方法。
同样这里,我们添加监视窗口:
程序运行的结果如下:
三、使用接口引用的好处:
编程灵活,类型不会很大的限制:
Imap pMap=new Map();
此时的pMap只能使用IMap接口中定义的方法和属性,比如获取图层的个数,添加图层等,但是不能清空视图上的内容(因为这个方法是在IActiveView中定义的)。
但是QI很方便的让我们在一个类的不同接口间进行切换:
IActiveView pView=pMap as IActiveView。
现在pView就可以使用IActiveView中定义中的方法。
参考资料:《C# 4.0图解教程》P285-P287
ArcEngine_10开发手册(2011版) P20-25