zoukankan      html  css  js  c++  java
  • [Objectoriented] : 接口

    前言 :

    接口
    是在面向对象里,是个不难懂,却是很重要的东西。
    笔者试着采用指标的方式,来解释接口的运作。

    接口 :

    底下是一段接口的程序代码
    这个程序代码很简单,就是ClassA实作ISampleX而已

    public interface ISampleX
    {
        void XXX();
        void YYY();
    }
    
    public class ClassA : ISampleX
    {
        public void XXX()
        {
            // ...
        }
    
        public void YYY()
        {
            // ...
        }
    
        public void ZZZ()
        {
            // ...
        }
    }

    当我们在程序内撰写如下的程序
    函式AAA与函式BBB内部同样是呼叫item.XXX();
    执行的结果也都相同都是执行ClassA.XXX()
    但是在执行顺序上却是不同的

    class Program
    {
        static void Main(string[] args)
        {
            AAA(new ClassA());
            BBB(new ClassA());
        }
    
        public static void AAA(ClassA item)
        {
            item.XXX();
        }
    
        public static void BBB(ISampleX item)
        {
            item.XXX();
        }
    }

    函式AAA是参考ClassA
    可以这样理解

    public static void AAA(ClassA item)
    {
        item.XXX();
    }

    函式BBB是参考ISampleX
    可以这样理解

    public static void BBB(ISampleX item)
    {
        item.XXX();
    }

    可以看的出来当我们参考接口的时候
    会在类别的外面多加一层
    程序代码依照这层接口的定义,来呼叫实际的对象程序代码

    参考 :

    我们再来看下面的程序代码

    public interface ISampleX
    {
        void XXX();
        void YYY();
    }
    
    public class ClassA : ISampleX
    {
        public void XXX()
        {
            // ...
        }
    
        public void YYY()
        {
            // ...
        }
    
        public void ZZZ()
        {
            // ...
        }
    }
    
    public class ClassB : ISampleX
    {
        public void XXX()
        {
            // ...
        }
    
        public void YYY()
        {
            // ...
        }
    
        public void AAA()
        {
            // ...
        }
    }

    当我们在程序内撰写如下的程序
    函式BBB是参考ISampleX,但传入的对象却分别为ClassA及ClassB。
    依照前面的说明,我们可以理解
    ClassA及ClassB在传入函式后,会加上一层名为ISampleX的外皮。
    所以函式BBB还是可以正常的执行。

    class Program
    {
        static void Main(string[] args)
        {
            BBB(new ClassA());
            BBB(new ClassB());
        }
    
        public static void BBB(ISampleX item)
        {
            item.XXX();
        }
    }

    可以这样理解

    后记 :

    本篇的文章,
    描述了接口的运作,希望对大家有帮助^^

    P.S.
    本篇的内容大幅度的简化了计算器结构的内容,用以传达面向对象的概念。
    实际计算机系统在运作的时候,比本篇说明的复杂很多 ^^"。

  • 相关阅读:
    UVA11300分金币
    hdu3987 最小割边数
    直线上的整点个数
    BZOJ 2818 Gcd
    服务器数据恢复成功案例+服务器数据恢复通用原理
    【转】Linux AIO机制
    如何更好地与人沟通?看完这本书,你也能成为沟通高手!
    “自我管理”是成功人士必备的能力,提高自我管理能力推荐你看这些书!
    能帮你提高沟通能力的十沟通类书籍推荐
    团队管理者必看的书籍推荐,团队管理的良方都在这本书里
  • 原文地址:https://www.cnblogs.com/clark159/p/2205027.html
Copyright © 2011-2022 走看看