深入接口

  一直对接口半生不熟,我想一些像我一样的新手也有同样的困惑。下面系统复习下咯。有异议或疑惑的欢迎讨论咯~

  

  .net基类库中有很多预定义的标准接口,我们自己的自定义类型完全可以实现这些预定义的接口,来支持对喜那个克隆、对象枚举和对象排序。

   接口就是一组抽象成员的集合。接口里的成员不能有访问修饰符,并且方法不能有实现。

   接口对比抽象基类,有一个面向对象的体系,如果用抽象基类来实现多态接口,意味着所有的子类都有这个“接口”的特性;如果是接口作为动态接口,那么只是实现它的类才需要实现方法,而这个实现接口的l类的子类从概念并不是接口的孙类。并且接口能作为多个面向对象体系的多态接口,而不是建造一个共有的超类。在我看来,接口更轻便与灵活,定义了一个规范,所以“继承”接口不是继承,而是实现。

  注意:c#在新建一个类时,是自动继承Object的,而接口没有自动继承任何基类。

  如果将类对象转换它不支持的接口,会引发异常,可以用try/catch来捕获,但更好的解决方案是判断是否支持某个接口,两种方法:as和is:

  as:

      Hexagon hex1=new Hexagon("Peter");

  IPointy itfpt2=hex1 as IPointy;//如果不支持IPointy返回nul

  if(itfpt2 !=null){

    ...//按照逻辑继续代码

  }

  else { ...//不支持此接口的处理方案 }

  is:

  Hexagon hex1=new Hexagon("Peter");

  if(hex1 is IPointy){...}

  

 接口可以组织接口层次结构,和类层次相似,如果接口扩展了既有接口,它就继承了父类型定义的抽象成员。和基于类的继承不同的是,派生接口不会实现抽象成员,只是拓展了本身,即继承了父类型的成,不用实现它们。所以,一个孙类继承了父接口,而这个父接口继承了超接口,那么孙类就必须实现父接口和超接口的方法。

 接口在以下情况下特别有用:

  •  只有一个层次结构,但是这个层次结构中只有一些类需要支持某些公共行为。
  • 需要构建的公共行为跨多个层次结构,而且除了System.Object以外,没有其他公共父类。
posted @ 2011-08-14 11:21  苏先森1989  阅读(319)  评论(0编辑  收藏  举报