您的位置:首页 > 编程语言 > C#

深入理解C# 3.0的五项主要改进 (extension方法)

2007-07-24 20:44 246 查看
2.extension方法

  在C#中,您不能继承和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法允许您扩充任何类,甚至是标记为封装的类。例如,如果希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。

  列表A

namespaceMyExtensionMethods
{
 public static class Extension
 {
  public static void NoSpaces(this string data)
  {
   return data.Replace(" ", "");
  }
 }
}

  在一个类中导入这个extension方法时,开发者就能够对这个类包含的任何字符串调用NoSapces()方法。

  extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;如果extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。

  要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)

  列表B

usingMyExtensionMethods;
namespace MyNamespace
{
 public class MyClass
 {
  public MyClass()
  {
   string data = "this is my data";
   //nospaces will contain "thisismydata".
   string nospaces = data.NoSpaces();
  }
 }
}

  注意extension方法的优先度比instance方法低。因此如果instance方法和extension方法有同样的签名,则应执行instance方法。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息