c#扩展方法

   上周五,看了一下公司一个项目的框架,虽然刚开始看的时候有些云里雾里的,但经过一天的潜心研究,慢慢的倒有些眉目了(还得花上几天的时间才能真正了解大师们的杰作)。在IT公司里面应该普遍都有一个这样的开发原则:开闭原则,通俗的讲就是尽量不修改原来的代码的基础上扩展新的功能方法。特别是在不同的公司之间,需要对另外的公司提供的类进行扩展的时候,就需要使用到扩展方法了,因为另外一个公司不可能把他做的类库全部给你看。连看一个最简单的例子:

     假如你在业务层BLL的一个BllClass类中定义了一个方法:

      public string SayHello()

     {

            return "大家好~~我是hellokit";

     }

   系统上线之后,这些类都已经编译完成了,当我们需要增加需求的时候,我们当然不可能再去修改这个类,这个时候据轮到扩展方法上场了~~:

   定义一个扩展方法:该方法必须是处在一个静态类中的静态方法:具体如下:

   public static SayHelloExtension

  {

        public static SayHelloExtensionMethod(this BLL.BllClass bllClass,string Name)//this BLL.BllClass bllClass指明你要往哪一个类里面添加扩展方法。

       {

               return Name+"大家好呀~~~~";

       }

   }

    在客户端的调用:

    BllClass bllClass=new BllClass();

    bllClass.SayHello();

    //神奇的事情即将发生:

   bllClass.SayHelloExtensionMethod("小白猫");//BllClass类对象竟然可以点出SayHelloExtensionMethod()方法,这就是扩展方法的魅力。在这里大家可能会有个疑问:既然扩展方法本质上是一个静态的方法,那为什么可以通过类的对象点出来?这就是微软为方便程序员而特别定义的一种“怪异”的方法,就如同Linq命名空间下的where的方法一致。

  通过源代码我们可以知道:bllClass.SayHelloExtensionMethod("小白猫")这一句通过编译器编译过之后,就是调用了静态类SayHelloExtension类的SayHelloExtensionMethod(),而不是将该扩展方法添加到原有的实例方法上~~~

   在用MVC开发的项目中,这种扩展方法随处可见,这里只是扩展方法的一个小小的例子,权当入门~~~~

   

posted @ 2012-11-03 16:32  肖&申&克  阅读(270)  评论(2编辑  收藏  举报