• C#扩展方法(转贴)


     那么扩展方法起什么作用呢?很多时候我们想为已经存在的类扩展某些功能,而又没有必要去继承该类,甚至有时候这个类根本就不允许继承,如String类,这时候就可以使用扩展方法来为其扩展功能。
          下面举例说明:


    一、我们创建一个类库如下:
     

    Code:
    1. using System;   
    2. using System.Collections.Generic;   
    3. using System.Linq;   
    4. using System.Text;   
    5.   
    6. namespace MethodExtendClasses   
    7. {   
    8.     //此类本身不起什么作用,只是在运行时将方法加载到内存中   
    9.     public static class ExtendsString   
    10.     {   
    11.         //用this关键字修饰了string 关键字,表示这个方法是string的扩展方法   
    12.         public static string SpaceToUnderLine(this string source)   
    13.         {   
    14.             char[] chars = source.ToCharArray();   
    15.             string temp = "";   
    16.             foreach (char c in chars)   
    17.             {   
    18.                 if (char.IsWhiteSpace(c))   
    19.                     temp += "_";   
    20.                 else  
    21.                     temp += c;   
    22.             }   
    23.             return temp;   
    24.         }   
    25.     }   
    26. }  

    然后编译。

    二、创建一个测试用的控制台程序,添加上一个项目的引用,然后将代码修改如下:
     

    Code:
    1. using System;   
    2. using System.Collections.Generic;   
    3. using System.Linq;   
    4. using System.Text;   
    5. using MethodExtendClasses;//此名称空间为扩展方法所在位置   
    6. namespace ConsoleApplication1   
    7. {   
    8.     class Program   
    9.     {   
    10.         static void Main(string[] args)   
    11.         {   
    12.             string str = "abc dd tt";   
    13.             str = str.SpaceToUnderLine();  //SpaceToUnderLine()方法就是我们为string增加的扩展方法,此时看起来好像string类多了个方法,其实我们并没有真正的操作string类   
    14.             Console.WriteLine(str);   
    15.         }   
    16.     }   
    17. }  

    编译运行,结果为:abc_dd_tt。说明SpaceToUnderLine()方法起到了作用。

    总结

    我们在进行方法扩展时,需要注意以下几点:
    1. 扩展方法所在类必须是静态的,而且必须是在顶级静态类上定义。
    2. 扩展方法必须是静态的。
    3.扩展方法的参数类型必须是要扩展的类型。
    4. 参数类型前必须要加this关键字。

    原地址:

    http://student.csdn.net/space.php?uid=1068338&do=blog&id=43677

  • 相关阅读:
    SDN实验2:Mininet 实验——拓扑的命令脚本生成
    2020软工实践第一次作业
    POJ2942-Knights of the Round Table
    POJ1966 ZOJ2182<无向图点连通度 Isap版>
    POJ1523(求割点)
    POJ2391(最大流Isap+Floyd+二分)
    POJ1087 ZOJ1157(最大流Isap+map映射)
    POJ1459(最大流Isap)
    数字的字符串处理 (转)
    POJ2112 最大流(Isap+Floyd+二分)
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/1888734.html
Copyright © 2020-2023  润新知