假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。
现在公司来了一个项目,要求派某个程序员写一个程序。
using System; //vb程序员 class VBpro { public void WriteCode() { Console.WriteLine("我用vb写代码"); } }
//c程序员 class Cpro { public void WriteCode() { Console.WriteLine("我用c写代码"); } }
//编写项目类 class Pro { public void Writeprogram(VBpro programer))//用VB写代码 { programer.WriteCode(); } public void Writeprogram(Cpro programer)//重载方法用C写代码 { programer.WriteCode(); }
}
//在主程序中我们可以这样写
class Program { static void Main() { Pro p = new Pro(); //如果需要用VB写代码 VBpro p1 = new VBpro(); p.Writeprogram(p1);
//如果需要用C写代码 Cpro p2 = new Cpro(); p.Writeprogram(p2); } }
但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类C#程序员类,同时在此项目类中要再次重载WritePrograme(C#pro programer)方法。这下麻烦多了。如果还有C++程序员,JAVA程序员呢。麻烦大了!
//但是如果改用接口,就完全不一样了
using System; //首先声明一个程序员接口 public interface IProgramer { void WriteCode(); }
//vb程序员 class VBpro: IProgramer { public void WriteCode() { Console.WriteLine("我用vb写代码"); } }
//c程序员 class Cpro: IProgramer { public void WriteCode() { Console.WriteLine("我用c写代码"); } }
//修改编写项目类 class Pro { public void Writeprogram(IProgramer programer) { programer.WriteCode(); } }
class Program { static void Main() { Pro p = new Pro(); VBpro p1 = new VBpro(); p.Writeprogram(p1); Cpro p2 = new Cpro(); p.Writeprogram(p2); } }
如果再有C#,C++,JAVA这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在main()中稍做修改就OK了。扩充性特别好!
另外我们如果把项目类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!
注:本文章参考C#中接口的深入浅出写成,本人尊重原作者,只不过在您源程序上做了修改,可以直接运行代码。在些向源作者深深致谢。
|