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

    技术2022-05-11  30

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

    最新回复(0)