当前位置:坤哥网-kungge-C#中的扩展方法

C#中的扩展方法

2015/9/17 22:38:00 坤哥网阅读(1105) 评论(0)

扩展方法使用
    在实际项目中,通常会定义一个静态类,类中包含一些常用的操作方法(如字符串处理,判断字符串是否是正确的电话号码或者Email等),将这些方法定义为静态方法,
使用方式:"静态类.静态方法(相关参数)",这样就不用实例化该类了,减少代码量,接下来说的扩展方法能使使用时代码更少。
c#3.0中引入扩展方法的概念,使用方式:在使用扩展方法的第一个参数前面加this关键字。下面演示了扩展方法的简单使用:
static  class CommonHelper
    {
      public static string TransferStrToUpper(this string str)
      {
          return str.ToUpper();
      }
    }

  class Program
    {
        static void Main(string[] args)
        {
            string str = "abcDEfg";
            string str1=CommonHelper.TransferStrToUpper(str);
            string str2=str.TransferStrToUpper();
            Console.WriteLine("str1={0},str2={1}",str1,str2);
            Console.ReadKey();
        }
    }

变量str1,str2都能成功转成大写。从表面上看变量str有一个TransferStrToUpper方法,但本质上其仍然是静态方法。

扩展方法本质
        其实扩展方法本质并不是仅为了使代码的写法上发生改变,以上只是演示如何创建并使用扩展方法。
扩展方法的引入,能模拟为不同的类类创建实例方法。假设有这样一种场景,如果实际项目中有一个字符串处理类比如叫SayLove,
但是该类不允许修改它的源代码并且是个密封类(不允许被继承),但是会用到该类里的一些方法,比如方法SayLoveYou,
当然这时你可以再定一个类SayLoveExtend,在这个类里的一个方法ExpressLove将类SayLove实例作为参数,这样就可以使用类SayLove内部的一些方法,能解决问题。
但如果能在类SayLove的实例上调用新增的方法ExpressLove,而不是创建另一个作用于它的类SayLoveExtend的实例,这样看起来更加好看,仿佛这个新增的方法就是类SayLove内部的方法。
下面是对该段文字描述的程序描述:
sealed class SayLove
    {
        public string SayLoveYou(string personName)
        {
            return personName + ",I Love you.";
        }
    }

static class SayLoveExtend
    {
        public static string ExpressLove(this SayLove sl,string girlFirend)
        {
            return sl.SayLoveYou(girlFirend)+"Marry me.";
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            string str = "Lily";
            SayLove sl = new SayLove();
            string str1=sl.ExpressLove(str);
            Console.WriteLine(str1);
            Console.ReadKey();
        }
    }

 程序输出:

 

标签: c#扩展方法
分类: C#

有话要说? =>【不用注册,直接登录】,然后刷新本页面来发表您的观点(●'◡'●)