以上是摘至MSDN对.NET扩展方法的描述,那么我们在实际开发中如何运用呢,下面我将以一个最简单的示例来加以说明。
首先看一下完整的测试示例代码:
using System;
namespace ExtesionMethodDemo
{
public class Program
{
static void Main(string[] args)
{
var doc = new Document { Id = 1, Title = "Test title", Content = "Extension methods are a special kind of static method, but they are called as if they were instance methods on the extended type. For client code written in" };
//常规统计文档的方法
Console.WriteLine("单词个数:{0}", NormalWordCount(doc.Content));
//扩展的统计文档的方法
Console.WriteLine("单词个数:{0}", doc.WordCount());
Console.ReadKey();
}
/// <summary>
/// 常规的统计文档内容的方法
/// </summary>
/// <param name="documentContent"></param>
/// <returns></returns>
static int NormalWordCount(string documentContent)
{
return documentContent.Split(new char[] { ' ', ',', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
/// <summary>
/// 定义一个文档类
/// </summary>
public class Document
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
/// <summary>
/// 定义一个文档的扩展类(扩展类必须是静态类)
/// </summary>
public static class DocumentExtension
{
/// <summary>
/// 统计一篇文档内容单词个数的扩展方法(必须是静态方法)
/// </summary>
/// <param name="document"></param>
/// <returns></returns>
public static int WordCount(this Document document)
{
return document.Content.Split(new char[] { ' ', ',', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
测试截图:
测试截图:
以上示例是对一个文档类“Document”的内容进行单词统计,示例中使用了常规及扩展两种方法来处理。可以看到,如果使用扩展方法,我们可以在对象”doc”上直接调用WordCount,而且不需要传入“doc”这个参数。传统的”NormalWordCount”方法则需要传入对应的参数,并且笔者认为使用扩展方法更为直观。