扩展方法是C#中新增的很重要的特性之一。其对于LINQ的实现起着关键的作用。在.NET2.0时代是没有LINQ的,所以.NET2.0以及之前版本中的集合类在设计的时候没有预留用于LINQ的方法。为了在不破坏这个类现有封装的前提下又可以为其添加LINQ的支持就需要用到扩展方法。
扩展方法使用上类似于静态方法,但在本质上其是实例方法。这是由于.NET3.5的运行环境仍然为CLR2.0 所以语言不可能做很大的变革,这一切都是语法糖。
下面仍然通过一段代码来说明扩展方法的实现:
(代码出自:李永京 http://lyj.cnblogs.com)
public static class Extensions
{
public static bool IsValidEmailAddress(this string s)
{
Regex regex = new Regex(@"^[\w\.]+@([\
w]+\.)+[\
w]{
2,4}$");
return regex.IsMatch(s);
}
}
如上代码所示,扩展方法为一静态方法,声明于一个静态类
,其参数前加上一个this
关键字,参数的类型表示这个扩展方法要对这个类型进行扩展。如上述代码表示其要对字符串类型进行扩展。
在应用上扩展方法被作为其扩展的类型的静态方法来调用。如下:
if (email.IsValidEmailAddress())
{
Response.Write("YJingLee 提示:这是一个正确的邮件地址");
}