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

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论