麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

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 开发手册

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)