首页 > 代码库 > 扩展方法

扩展方法

判断一个字符串是否是正确的Email地址:IsEmail.在string的类型定义时添加这个方法不也行吗?正式因为微软没有提供这个方法,咱们才需要给它“增加”IsEmail“方法。

  1. StringHelper类上标注static变成静态类,方法是静态方法--------------由于静态类不能new,所以也就不能声明非static成员(实例成员)
  2. 所有函数的第一个参数是被扩展的对象,前面标注this。
  3. 使用扩展方法的时候必须保证扩展方法类已经在当前代码中using。
 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace 扩展方法 8 { 9      static class StringHelper10     {11         //什么样的类声明为static方法12         //就是没有用到任何的(非static)字段、属性13         //第一个参数前加this,第一个参数类型为待扩展的类型14          public static bool IsEmail(this string s)15          {16              return s.Contains(@);17          }18          /// <summary>19          /// TryParse这个方法会返回一个布尔值,来表示解析是否成功,那么就可以免去添加异常处理代码的麻烦。20          /// </summary>21          /// <param name="s"></param>22          /// <returns></returns>23          public static bool IsNumber(this string s)24          {25              int i;26              return Int32.TryParse(s, out i);27          }28          public static string ToHanZi(this bool b)29          {30              return b ? "" : "";31          }32          public static string Quoted(this string s)33          {34              return "[" + s + "]";35          }36          //和上面方法构成重载,37          public static string Quoted(this string s, string q1, string q2)38          {39              return q1 + s + q2;40          }41     }42 }

应用扩展方法:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace 扩展方法 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             string s = "a@b.com";14             Console.WriteLine(s.IsEmail().ToHanZi());15 16             //不能这么使用,IsEmail()是为string类进行扩展的方法17             //s.IsNumber()的返回值是Bool类型,他没有IsEmail()方法18             //Console.WriteLine(s.IsNumber().IsEmail());19 20             //如果扩展方法的命名空间与项目不一样,必须using扩展类的namespace21             if (s.IsEmail())22             {23 24             }25 26             Console.ReadKey();27         }28     }29 }