ArcGIS Engine 10 开发手册(2-4)快速理解QI
COM 中,和我们打交道的是接口,也就是说类对我们是隐形的,那么我们要做开发,要使用这些功能, 我们只能通过接口,通过接口暴露出来的方法,COM 是一种服务器端/客户端架构,服务器端定义了操作 的方法,客户端通过接口调用这些方法。下面的这幅图很能说明 COM 的结构:
C#+QI的例子
言归正传,说这篇博文的主题 QI,还记得上一篇我强调的,一个接口可以被多个类实现,而 QI 要解 决的就是一个类实现多个接口的问题。在 COM 中,接口定义了方法,类实现了接口中定义的方法,而一个 接口只能使用自己内部定义的方法,而不能越界,就好比一个班级一样,这个班级内有班长,有学习委员, 有体育委员,每位干部各司其职,每一位干部负责自己职权范围之内的事情,各位干部相互协作,解决班 级内的事情,这班级内的每一位干部就相当于一个接口,而这个班级就相当于实现了这些接口的类。当这 个班级的一些事情需要班长处理的时候,我们就执行班长这个接口中定义的方法,当需要学习委员处理的 话,我们再将执行权交给学习委员这个接口,这也就是接口之间的互相访问(Query Interface),通过这 个我们大体上对 QI 有了感性上的认识,下面我们通过实例演示一下。我定义了两个接口:
IFavoriteFood 接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
interface IFavoriteFood
{
void Food ();
}
}
IVoice接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
interface IVoice
{
void Voice ();
}
}
然后定义了一个 Cat 的类实现这里面的方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
class Cat : IFavoriteFood, IVoice
{
public void Food ()
{
Console.WriteLine ("我喜欢的食物是老鼠.");
}
public void Voice ()
{
Console.WriteLine ("喵,喵,喵...");
}
}
}
这个 Cat 类的功能就是实现两个接口的方法,猫最喜欢的事物是老鼠,而他的声音是“喵,喵,喵”。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
class Program
{
static void Main (string\[\] args)
{
IVoice pVoice = new Cat ();
pVoice.Voice (); //只能调用IVoice中定义的方法
// pVoice.Food();这个就会报错,因为 IVoice 接口中没有这个方法的定义 IFavoriteFood pFavoriteFood = pVoice as IFavoriteFood; pFavoriteFood.Food();//只能调用IFavoriteFood定义的方法 Console.ReadLine();
}
}
}
运行后可以看到如下效果效果:
ArcGIS Engine 10 开发手册全集
ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。