接口是面向对像编程里的基础知识了。但不得不承认之前对于接口的认识还是不到位的。记得刚毕业的时候从Asp转向.NET开发,接触了面向对像编程的很多知识。由于自己当时对新的知识非常感兴趣。因此在写代码的时候尽量往这些思想上靠拢。现在打开之前写的代码,看了简直要笑喷了。怪不得当时写完之后心理还想着接口好像没啥用啊。。。还增加不少工作量。
下面就先看看我之前是怎么用接口的吧,以下是我在07年的时候写一个域名Whois信息查询的代码片段.
1. 之前知道接口是先要先定义的,而且没有实现。所以我基本上把所有会用到的方法都先用接口定义出来。不想图片太大找了一个方法的代码来打开。
2. 知道方法的实现是在类里的,所以下面代码没有问题。就是引用接口并且具体实现方法
3.接口的定义和实现都有了,那么就是实现了。由于第一步就埋下失败的伏笔所以再接下来的使用就成了彻底的杯具了。。
看下图我画的箭头指向的位置,直接实例化类,跟接口没有半毛钱关系。
当时,这样开发下来之后还以为自己用了接口了。但是其实是彻底的没有搞懂。包括前面的定义就出现问题了,也就是不是根据接口的特点及面向对像编程的思想来开发的。直接就是霸王强上弓或者说是把接口当作虎皮膏药到哪都贴。
那么既然说了这么多在使用接口时的错误,怎么才能快速就清楚接口的定义和用法呢?具体概念性的东西不多说了。参考涛哥的文章吧《[你必须知道的.NET] 第二回:对抽象编程:接口和抽象类》,我下面要举的是非常简单的例子(不全面)作为入门人员阅读。 借鉴众多园友的评论我在示例中添加了直接传类的调用
namespace ConsoleApplication4
{
//接口
internal interface IMyHandler
{
void SayHello();
void SayMsg(string msg);
}
//具体实现类A
class MyHandlerA :IMyHandler
{
public void SayHello()
{
Console.WriteLine("Hello from MyHandlerA");
}
public void SayMsg(string msg)
{
Console.WriteLine(msg+" from MyHandlerA");
}
}
//具体实现类B
class MyHandlerB : IMyHandler
{
public void SayHello()
{
Console.WriteLine("Hello from MyHandlerB");
}
public void SayMsg(string msg)
{
Console.WriteLine(msg + " from MyHandlerB");
}
}
class Program
{
static void Main(string[] args)
{
//实例化A,用接口类型来声明
IMyHandler myHandler = new MyHandlerA();
myHandler.SayHello();
//实例化B
myHandler = new MyHandlerB();
myHandler.SayHello();
//传接口
Write(myHandler);
//传类A
MyHandlerA myHandlerA = new MyHandlerA();
Write(myHandlerA);
Console.Read();
}
//接口作为参数类型
static void Write(IMyHandler myControl)
{
myControl.SayMsg("Hello World!!!");
}
}
}
其实就是在接口的使用的时候用接口类型来声明,将接口作为参数类型,这两个基础基础的操作。
我知道在博客园这种地方,首页放这样的文章一定会被无数人鄙视的,但我还是想发到首页。让更多人看看接口是如何使用的。这是一到跨向面向对像编程的鸿沟,让尽量多的人能够快速通过这个鸿沟,通向面向对像编程的大道吧:)