zoukankan      html  css  js  c++  java
  • 接口

    接口,就是契约,用于制定一种规则由大家遵守。例如INullable、ICloneable、IEnumerable、IComparable等,意指能够克隆、能够枚举、能够对比、只有实现了接口,才能实现此功能。

    interface IDriveable
    {
        void Drive();
    }

    面向 接口编程就意味着,在自定义类中要驾驭这种特性,就必须遵守这种契约。

    public class BusDriver:IDriveable
    {
      public void Drive(){
            Console.Writeln("由有经验的司机可以驾驭公共汽车");
    }  
    }

    没有实现IDriveable接口的类型,则不被允许具有Drive这一行为特性,所以接口是一种行为规范。例如要使用foreach语句迭代,则操作类型必须实现IEnumerable接口。

    实现接口还意味着,同样的方法对不同的对象表现为不同的行为。

    public class TractorDriver:IDriveable
    {
        public void Drive()
        {
              Console.WriteLine("拖拉机司机驾驭拖拉机");
        }
    }
    public class TractorDriver:IDriveable
    {
        public void Drive()
        {
              Console.WriteLine("拖拉机司机驾驭拖拉机");
        }
    }

    在面向对象世界中,接口是实现抽象机制的重要手段,通过接口实现可以部分弥补继承和多态在纵向关系上的不足。接口在抽象机制上,表现为基于接口的多态性。

    public static void Main()
    {
      IList<IDriveable> drivers = new List<IDriveable>();
      drivers.Add(new BusDriver());
      drivers.Add(new CarDriver());
      drivers.Add(new TractorDriver());
    
      foreach(IDriveable driver in drivers){
      driver.Drive();
    }
    }

    通过接口实现,同一个对象可以有不同的身份。

    .Net中的接口

    1:接口多继承

         在.Net中,CLR支持单实现继承和多接口继承。这意味者,同一个对象可以代表多个不同的身份。以DateTime实例代表多个身份。

        

    public struct DateTime:IComprable,IFormattable,IConvertible,ISerializable,IComparable<DateTime>,IEquabable<DateTime>

       因此,可以通过DateTime实例代表多个身份,不同的身份代表不同的行为。

       

    public static void Main()
    {
        DateTime dt = DateTime.Today;
        int result = ((IComparable)dt).CompareTo(DateTime.MaxValue);
        DateTime dt2 = ((IConvertible)dt).ToDateTime(new System.Globalization.DateTimeFormatInfo());
    }

     接口规则:接口隔离原则强调接口应该被实现为具有单一功能的小接口,而不要实现为具有多个功能的胖接口,类对于类的依赖应建立在最小的接口之上。

          接口支持多继承,既可以用于值类型,也可以作用于引用类型。

          接口不能被实例化,没有构造函数,接口成员被隐式声明为public 

  • 相关阅读:
    字节编码中文编码方式总结
    参数读取一个关于java.net.Socket的超时的问题
    属性处理器Spring攻略学习笔记(2.12)外部化Bean配置
    设置编译器让CodeBlock支持C99标准
    相机标记[置顶] OpenCV for Ios 学习笔记(6)-标记检测3
    宋体配置JAVA j2ee (一) 轻松入门
    连接固件Jlink v8固件修复
    css的使用和基本语法
    css语言基础css的选择符语法
    css语言基础css属性值的规范
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/15626179.html
Copyright © 2011-2022 走看看