编写一个类,可以继承其他类,但当不能使用继承类时,则可以使用扩展方法。

扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。

怎么使用

假设希望用一个方法扩展string类型,该方法计算字符串中的单词数。

  1. public static class StringExtension
  2. {
  3. public static int GetWordCount(this string s) => s.Split().Length;
  4. }

使用this关键字和第一个参数来扩展字符串。这个关键字定义了要扩展的类型。

即使扩展方法是静态的,也要使用标准的实例方法语法。

  1. string fox = "the quick brown fox jumped over the lazy dogs down " +"9876543210 times";
  2. int wordCount = fox.GetWordCount();
  3. //注意,这里使用fox变量而没有使用类型名来调用GetWordCount ()。
  4. //在后台,编译器把它改为调用静态方法:
  5. int wordCount = StringExtension.GetWordCount(fox);

this

this关键字必须匹配类型的扩展方法,而且需要打开定义扩展方法的静态类所在的名称空间。
如果把StringExtensions类放在名称空间Wrox. Extensions中,则只有用using指令打开Wrox.Extensions,编译器才能找到GetWordCount方法。