接口对象的实例化在接口回调中的使用

接口是不能实例化的,但是接口可以申明引用。接口的引用可以指向凡是实现了该接口的类的实例。格式如下:

  【接口名】 【对象名】= new 【实现该接口的类】

这是因为面向对象都具有多态,可以向上转型。比如某个类实现了IConnection接口,如类Connection实现了该接口,

则Connection类的实例化对象可以给IConnection接口. 如 IConnection objIConnection = new Connection();

 

申明引用的好处是可是实现统一访问(即统一接口,可以随意指向实现了该接口的类的实例)

例如:http://hi.baidu.com/yimeng3025/blog/item/2cfc7bbe21fb330218d81f4d.html(c#接口详解)

 

Code

 

接口声明变量:

private IBellListener  bellListener;(注:IBellListener是接口,这句代码只是声明了一个私有的变量,这个私有变量是接口类型的,这时候堆内存中的这个变量未引用栈内存中的实例对象,故并没对其实例化。)

 

接口声明方法:

public IEnumerator<T> GetEnumerator()

    {

        Node current = head;

 

        while (current != null)

        {

            yield return current.Data;

            current = current.Next;

        }

    }

====================================================================================

首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化!作用见下文。

接口回调:可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口中的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口方法。

我们看下面的例子:
Code
        
结果输出:
            矩形的面积是:18.0
            棱柱的体积是:60.0
            圆的面积是:78.5
            圆柱的体积是:261.6666666666667

            通过上面的例子,我们不难看出,接口对象的实例化实际上是一个接口对象作为一个引用,指向实现了它方法的那个类中的所有方法,这一点非常象C++中的函数指针,
    但是却是有区别的。java中的接口对象实例化实际上是一对多(如果Computerable还有其他方法,bottom仍然可以调用)的,而C++中的函数指针是一对一的。

            但是需要注意的是,接口对象的实例化必须用实现它的类来实例化,而不能用接口本身实例化。用接口本身实例化它自己的对象在JC#中是不允许的。
 
posted @ 2009-09-30 14:45  .NET钉子户  阅读(612)  评论(0)    收藏  举报