谈谈我对接口的理解
写在前面:
本随笔,之所以叫随笔而不叫文章。就是说本文只是个人对技术的粗浅理解,不当、抑或错误之处在所难免。如遇高人指点一二,自当不胜感激。
从概念上看接口
1、MSDN上有如下定义:
接口描述的是可属于任何aspx">类或结构的一组相关功能。
那么何为一组相关功能,其实就是一种共同的行为。那么为什么要把这种共同的行为,抽象到一个接口中呢?
这就要从下面说起了:
1、规范和约束
中国有句古话叫做“没有规矩不成方圆”,经过千年的传承,证明这句话还是很有道理的。车同轨,书同文,行同伦。经济才能发展,社会才会进步,这就充分说明了规范和约束存在的重要性。现实生活中的例子也比比皆是,比如家里的电源插座,就只有两种接口,试想一下,如果不同的电器产品都有自己的电源插座的标准,而不遵守这种约束,那将会成什么样子?在比如我们常用数码产品的数据线,我总是在想要是所有的都能用一条该多好啊!废话说了一堆,我无非是想说规范和约束,在特定的情况下是有好处的。这也就是为什么要把这种共同的行为,抽象到一个接口的原因之一。
2、多态的实现
关于多态,大家可以参看MSDN,至于能不能理解,能理解到什么程度,全在个人修行,通过接口可以实现这种多态的行为。
从C#语言看接口
关于接口如何使用,语法层面上的东西我不想多说,园子里已经有很多文章,大家可以参考。在这里我想通过显式接口以及访问修饰符的层面上来谈谈我对接口的理解。
大家都知道接口中定义的成员是没有访问修饰符的。例如:如果你要在 void doWork()前面加上访问修饰符,编译将不会通过。
1: interface IControl2: {3: void doWork();4: }但是为什么要这么设计呢?这时候有人就说了,你这不是废话么!接口就没有必要用访问修饰符,接口就是让人来实现的,接口中的成员如果设置成除了public以外的修饰符,就没有意义了。所以在设计C#的时候,微软就把接口设计成不需要使用访问修饰符。但底层却全部是使用的public,这一点我们可以冲IL代码中看出,如下图:
所以在某个类实现该接口的时候,doWork()方法也必须是public的,如果不是同样编译不过。
1: class Worker : IControl