• 类的扩展方法


    C#当中的扩展方法

     

      先说有用的,c#扩展方法结论:

      扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。扩展方法必须是静态方法,可以像实例方法一样进行调用。且调用同名中实际定义的方法优先级要高于扩展方法。

      先来个简单的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static class test
        {
            public static int CountYourNumber(this string str)
            {
                return str.Split(new char[] {' ','.','?' },
                    StringSplitOptions.RemoveEmptyEntries).Length;
            }
        }
    }

      这里我定义了一个测试类,CountYourNumber方法作为string类型的扩展方法。当中第一个参数前面出现一个this,这表示对string中添加扩展方法,在调用该接口时,可以调用到该扩展方法。

    1
    2
    3
    4
    5
    public static void testMethod()
    {
        string s = "Hello Extension Methods,I`m learning you";
        int alphabetNum = s.CountYourNumber();
    }

      这里alphabetNum接收到的是s的字母数量。s是定义的一个字符串,这里可以看出,我们自己写的扩展方法可以在这里调用,会有一个(扩展)字样,注意这里调用方法时不需要传参数。截图:

      在我们实际应用中也很广泛,举个我们常用的例子:linq标准查询,或者找到Queryable类,截图如下:

      这些都是微软写好的扩展方法,注意:这些方法里的第二个参数是需要在扩展方法里传入的第一个参数。Expression<func<TSourse,int>> selector这种是需要传入一个lambda表达式的。而第一个参数,就是需要扩展的类。

    分割线------------------------------------------------------------------

      扩展方法与其扩展的类之间并没有什么本质的联系,最终编译器还是将扩展方法转化成静态类的静态方法调用,所以扩展方法不能访问相应类的私有字段和私有方法;至于为什么使用静态类的静态方法,有一种说法是这样效率相对较高,同时扩展方法作为其他类的扩展,本身类的实例化没有什么意义。

  • 相关阅读:
    数据加载存储和文件格式
    基本概率分布图的绘制
    pandas处理各类表格数据
    python时间处理
    matplotlib实现数据可视化
    sql学习笔记:表的运算
    sql杂记:一些坑和数据库恢复
    exists关键词和case表达式
    后台工具screen
    SQL函数小记
  • 原文地址:https://www.cnblogs.com/WebApp-DotNet/p/9706974.html
Copyright © 2020-2023  润新知