扩展方法:

namespace ExtensionMethods

{

public static class MyExtensions

{

public static int WordCount(this String str)

{

return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;

}

}

}

在代码中,可以使用实例方法语法调用该扩展方法。但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。因此,并未真正违反封装原则。实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

定义和调用扩展方法

  1. 该类必须对客户端代码可见。有关可访问性规则的更多信息,请参见 访问修饰符(C# 编程指南)

  2. 将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
  3. 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
  4. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的 命名空间
  5. 请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。您只需通过 n 为这两个形参提供实参。

例子:

namespace CustomExtensions

{


					//Extension methods must be defined in a static class
					


					public
					static
					class StringExtension

    {


					// This is the extension method.
					


					// The first parameter takes the "this" modifier
					


					// and specifies the type for which the method is defined.
					


					public
					static
					int WordCount(this String str)

        {


					return str.Split(new
					char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;

        }

    }

}

注意:1、扩展方法必须是静态的类中的静态方法。

2、扩展方法的第一个参数总是包含this关键字,然后跟着目标类型与目标实例。

3、扩展方法的文件作用域与其他普通方法一致。

在LINQ中使用Lambda表达式: => 左边是参数,右边是方法体。Lambda与扩展方法连用。

posted on 2010-05-06 09:18  BLoodMaster  阅读(276)  评论(0编辑  收藏  举报