您的位置:首页 > 编程语言 > C#

C#中的扩展方法

2015-09-17 22:38 330 查看
扩展方法使用
在实际项目中,通常会定义一个静态类,类中包含一些常用的操作方法(如字符串处理,判断字符串是否是正确的电话号码或者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();
}
}


程序输出:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: