zoukankan      html  css  js  c++  java
  • AE开发之我思-QI(接口查询)

    AE开发之我思-QI(接口查询)

     转载至http://www.cnblogs.com/JimmyGao/archive/2011/03/08/1977741.html

       

        对于了解AE的开发人员来说,都知道AE都是基于接口(interface)进行编程的。AE中所有的类(Class)都是通过接口实现的,我个人认为这是一个极好的架构,对于扩张程序是极其方便的。比如说,当我要自定义一个地图操作类时,我就可以使用AE中定义好的接口,实现这些接口的属性和方法就可以了。但是当我们不用接口,而是将它全部都写成为类,这在后期要实现更改类的方法或是属性时,后期的维护工作可想而知有多大了。但对于接口来说,就不一样了,我们可以在接口中定义属性和方法,再让这些类实现这些属性和方法便可,不需要对类做大手术,既节省时间,又节约了成本,何乐而不为呢。呵呵。

        讲了这么多,就是想说一点使用接口的好处。但往往好处多的东西,往往理解起来不是那么容易。就比如说接口查询(QI):同一个类中不同接口之间的转换。即:在一个类实现了多个接口,从类中的一个接口跳转到另外一个接口的过程就是QI(接口查询)。

        在这里,我主要提两点:1.接口查询(或者叫接口转换)是针对同一个类实现的接口来说的,不同的类实现的接口之间是不能进行QI的。例如,类A实现(继承)了接口IA1,IA2,IA3,IA4。类B实现(或者继承)了接口IB1,IB2,IB3,IB4。那么类A中的四个接口(A1~A4)之间是可以进行接口查询的,类B的四个接口(B1~B4)也是可以进行接口查询的,但是类A实现的接口与类B实现的接口之间是不能进行接口查询的,即:接口查询仅限于同一个类实现的多个接口之间。
    接口查询(或者叫接口转换)是针对同一个类实现的接口来说的,不同的类实现的接口之间是不能进行QI的。例如,类A实现(继承)了接口IA1,IA2,IA3,IA4。类B实现(或者继承)了接口IB1,IB2,IB3,IB4。那么类A中的四个接口(A1~A4)之间是可以进行接口查询的,类B的四个接口(B1~B4)也是可以进行接口查询的,但是类A实现的接口与类B实现的接口之间是不能进行接口查询的,即:接口查询仅限于同一个类实现的多个接口之间。
         2.为什么要进行接口查询?当我们用new关键字实例化了一个类,并将该类实例的引用保存到一个接口类型的变量里面(注:该类实现了该接口),如:IA1 a1=new A();我们知道类A实现了四个接口,但是,对象A目前所能使用的方法和属性就只有接口IA1中所定义的属性和方法,而不能使用其他三个接口所定义的属性和方法。但是,如果我们还想使用其它三个接口(IA2,IA3,IA4)所定义的方法和属性,那么这个时候就要用到QI。
          下面我们借用别人写的两个例子来具体地解释一下QI的使用。
    我们首先自己定义两个接口和一个类,具体如下:
    //自定义两个接口
            interface IMap
            {
                void ClearLayers();
            }
            interface IActiveView
            {
                void Clear();
            }
            //定义了一个类,该类继承了上面定义的两个接口
            class MapClass:IMap,IActiveView
            {
                 void IMap.ClearLayers()
                {
                    MessageBox.Show("执行了ClearLayers方法");
                }
                 void IActiveView.Clear()
                {
                    MessageBox.Show("执行了Clear方法");
                }
            }
            private void btntest_Click(object sender, EventArgs e)
            {
                IMap pMap=new MapClass();//实例化了类MapClass,并将对象的引用保存的IMap类型的变量里面
                pMap.ClearLayers();//调用了接口IMap所定义的方法
              pMap.Clear();//如果我们这样调用接口IActiveView里面的方法,会出现编译错误。原因是在接口IMap里面根本就没有定义Clear()这个方法。目前,类实例所能使用的方法就只有ClearLayers()这个方法,如果我必须使用Clear()这个方法怎么办呢?这时候QI就该发挥它的威力了。
                IActiveView pActiveView = pMap as IActiveView;//进行了QI
    ()
                pActiveView.Clear();
            }
            今天就说到这里,刚开始学习,如有不妥之处,请各位网友批评指正,共同进步。有些内容参考了网上的一些资料。特次说明。

  • 相关阅读:
    C. Shaass and Lights 解析(思維、組合)
    D. Binary String To Subsequences(队列)(贪心)
    CodeForces 1384B2. Koa and the Beach (Hard Version)(贪心)
    CodeForces 1384B1. Koa and the Beach (Easy Version)(搜索)
    CodeForces 1384C. String Transformation 1(贪心)(并查集)
    CodeForces 1384A. Common Prefixes
    POJ-2516 Minimum Cost(最小费用最大流)
    POJ3261-Milk Patterns(后缀数组)
    HDU-1300 Pearls(斜率DP)
    HDU-4528 小明系列故事-捉迷藏(BFS)
  • 原文地址:https://www.cnblogs.com/aipingniu/p/5987996.html
Copyright © 2011-2022 走看看