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 

  • 相关阅读:
    微信小程序---自定义三级联动
    jQuery分页插件
    微信小程序点击图片放大
    微信小程序----日期时间选择器(自定义精确到分秒或时段)
    PHP文件上传error的错误类型
    获取url传的参数转变为对象的方法
    mysql忘记密码时,重新修改密码
    表单注册及自定义validate手机验证码验证实例
    登陆jq表单验证及jqcookie记住密码实例
    iframe高度自适应,自适应子页面高度
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/15626179.html
Copyright © 2011-2022 走看看