本文实例讲述了C#扩展方法。,具体如下:
扩展方法
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。
如果我们有这么一个需求,将一个字符串的第一个字符转化为大写,第二个字符到第n个字符转化为小写,其他的不变,那么我们该如何实现呢?
不使用扩展方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
//抽象出静态StringHelper类
public static class StringHelper
{
//抽象出来的将字符串第一个字符大写,从第一个到第len个小写,其他的不变的方法
public static string ToPascal(string s,int len)
{
return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
}
}
class Program
{
static void Main(string[] args)
{
string s1 = "aSDdAdfGDFSf";
string s2 = "sbfSDffsjG";
Console.WriteLine(StringHelper.ToPascal(s1,3));
Console.WriteLine(StringHelper.ToPascal(s2, 5));
}
}
}

使用扩展方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
class Program
{
static void Main(string[] args)
{
string s1 = "aSDdAdfGDFSf";
string s2 = "sbfSDffsjG";
Console.WriteLine(s1.ToPascal(3));
Console.WriteLine(s2.ToPascal(5));
}
}
//扩展类,只要是静态就可以
public static class ExtraClass
{
//扩展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal
public static string ToPascal(this string s, int len)
{
return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
}
}
}

通过上面两种方法的比较:
1.代码在访问ToPascal这样的静态方法时更为便捷。用起来就像是被扩展类型确实具有该实例方法一样。
2.扩展方法不改变被扩展类的代码,不用重新编译、修改、派生被扩展类
定义扩展方法
1.定义一个静态类以包含扩展方法。
2.该类必须对客户端代码可见。










