C#中的扩展方法
扩展方法使用
在实际项目中,通常会定义一个静态类,类中包含一些常用的操作方法(如字符串处理,判断字符串是否是正确的电话号码或者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(); } }
程序输出:
- 一步一个脚印,稳扎稳打,实事求是。
- 记录所学知识,记录自己的成长轨迹。
- 记录过程中,发现问题并解决问题。
- 感谢您的阅读!(●'◡'●),如果您觉得本文对您有帮助的话,麻烦点个推荐,欢迎转载,转载请带上原文链接,谢谢!

浙公网安备 33010602011771号