C#提供了一种机制,可以扩展系统或者第三方类库中的方法。比如说想在string类型的对象里面多一个ToInt32(),来方便的将字符转换成整形。在实现的过程中的关键字为static和this即可。
     下面我们来做一个在string类型中新建一个ToInt32的自定义方法:

public static class Extension//必须先声明一个静态类,类名随意
    {
        public static int ToInt32(this string In)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型为需要扩展的类型
        {
            return Convert.ToInt32(In);
        }
    }

那么在使用string的对象的时候,会多出一个ToInt32的方法。

static void Main(string[] args)
{
       string a = "1";
       int b = a.ToInt32();
       Console.ReadLine();
}

既然可以扩展.net的内置类型,扩展自定义类型也是可以的。

public class A//先定义A类
    {
    }

public static class Extension//必须先声明一个静态类,类名随意
    {
        public static int ToInt32(this string In)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型
        {
            return Convert.ToInt32(In);
        }
        //为A新增一个ExtensionMethod方法
        public static string ExtensionMethod(this A a)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型
        {
            return "this is extension method";
        }
    }

在使用A的对象的时候,会多出一个ExtensionMethod方法:

static void Main(string[] args)
{
      string a = "1";
      int b = a.ToInt32();
      A c = new A();
      string d = c.ExtensionMethod();
      Console.ReadLine();
}

C#扩展方法实现的更多相关文章

  1. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  2. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  3. 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇

    最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...

  4. C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...

  5. 扩展方法(C#)

    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 下面的示例为String添加 ...

  6. 扩展方法解决LinqToSql Contains超过2100行报错问题

    1.扩展方法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  7. C#扩展方法

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法就相当于一个马甲,给一个现有类套上,就可以为这个类添加其他方法了. 马甲必须定义为stati ...

  8. 枚举扩展方法获取枚举Description

    枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...

  9. 扩展方法 1 简单的string扩展方法

    这里是关于 String的简单扩展方法 (静态类 静态方法 this 类型 这里是string) static class Program { static void Main(string[] ar ...

  10. C#中的扩展方法

    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 以上是msdn官网对扩展方 ...

随机推荐

  1. linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号

    1:linux操作系统 netstat 命令用于显示各种网络相关信息,即网络状态.而我主要使用netstat查看端口号是否启动: 参数详情: 1 -a (all)显示所有选项,默认不显示LISTEN相 ...

  2. explicit specialization 显式指定

    //explicit specialization 显式指定 #include "stdafx.h" #include <iostream> #include < ...

  3. ionic 3 安卓手机获取经纬度坐标

    现在有个需求:每隔一段时间需向后台服务器返回当前用户的经纬度坐标. ionic 官方提供的有定位插件cordova-plugin-geolocation,兼容ios和android版本,网上查资料说最 ...

  4. 期货大赛项目|三,autofac简单用法

    autofac是依赖注入 我们以前要引入一个dal层,是这么写的 private IDal _dao = new Dal() 我们可以看得出,这样写,我们的bll层不光依赖了接口IDal,还依赖了Da ...

  5. bat批处理文件 批量修改文件名

    需要将一系列文件如out-M0.png, out-M1.png, out-M2.png, ... 重新命名为 color-0.png, color-1.png, color-2.png, ... 方法 ...

  6. vs code 前端如何以服务器模式打开 [安装服务器] server insteall

    首先要安装 vs code 和 node.js(既然是前端就必须回,不会的面壁思过)然后在命令符中输入 npm install -g live-server 进行安装,(简单的NPM安装)安装成功后在 ...

  7. lvs-dr

    第5节  dr模型 在rs上配置 :rip  和vip   vip定义在lo别名上 Director 上配置:vip  和dip 都只需要一块网卡  网卡都桥接 Vip: 192.168.0.105 ...

  8. MySQL函数大全 及用法示例

      字符串函数 ASCII(str)    返回字符串str的第一个字符的ASCII值(str是空串时返回0)  mysql> select ASCII('2');   -> 50  my ...

  9. vue中的provide/inject的学习使用

    irst:定义一个parent component ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <template>  <div> ...

  10. maven pom.xml(公司版)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...