码迷,mamicode.com
首页 > Windows程序 > 详细

C#中的扩展方法

时间:2015-09-17 23:14:21      阅读:284      评论:0      收藏: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#中的扩展方法

标签:

原文地址:http://www.cnblogs.com/kungge/p/4817884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!