很多刚刚接触C#时都会很难理解接口这种类型是作什么用途,我个人认为,理解接口是理解Frnamework框架的一个重要前提。言归正传,接口究竟可以做些什么?先看看以下代码:
using System;
namespace Test
{
interface IShowMessage
{
void Show(string strMesg);
}
class Demo : IShowMessage
{
public void Show(string strMesg)
{
Console.WriteLine("You show the message : {0}", strMesg);
}
}
class DemoFactory
{
public static Demo CreateDemo()
{
return new Demo();
}
}
class Program
{
public static void Main()
{
IShowMessage sm = DemoFactory.CreateDemo();
sm.Show("I am successful!");
}
}
}
以上的例子定义了一个IShowMessage接口,实现此接口的类都能在后台输出信息,Demo类就是实现IShowMessage接口的一个类,所以Demo就具有向后台输出一条信息的能力了。大家有没有注意到我在Main()中并不是直接用Demo类创建实例,而是通过DemoFactory类中的一个静态方法CreateDemo()创建,这样做有什么好处?这是为了应付一些需求变化,有些需求变化会导致Demo类变得一无是处,我需要重新创建另一个类,并同时实现IShowMessage接口,这时我需要向后台输出两条信息,或者我要将信息写入到一个文本文件中,这时只需要在DemoFactory中将 “return new Demo” 改成 “return new NewDemo” ,这样,在应用程序中凡是 "IShowMessage sm = DemoFactory.CreateDemo" 中的sm接口对象就会应用了NewDemo中的Show方法。
或许你会觉得可以直接在原来的Demo类中改,对!你完全可以这样做。此时我们又带大家去到另一个场景。大部份应用程序都是直接与数据库打交道,你可以定义一个访问数据库的接口(比如:IData),例如新增、删除、修改、查询等操作,建立一个数据库操作类(比如叫做DataAccess,专门对Access数据库进行操作)来实现此接口,其他的类都是通过此DataAccess类对数据库进行新增、删除、修改、查询等操作。如果以后有客户需要用SqlServer作为数据库,这时只要创建一个实现IData接口的类,并在工厂方法中将旧类的地方修改成新类,这样应用程序的数据访问就变成对SqlServer进行操作。
以上是我对接口的一些理解,最重要的是多思考,举一反三。