全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#扩展方法实例分析

本文实例讲述了C#扩展方法。分享给大家供大家参考,具体如下:

扩展方法

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

如果我们有这么一个需求,将一个字符串的第一个字符转化为大写,第二个字符到第n个字符转化为小写,其他的不变,那么我们该如何实现呢?

不使用扩展方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  //抽象出静态StringHelper类
  public static class StringHelper
  {
    //抽象出来的将字符串第一个字符大写,从第一个到第len个小写,其他的不变的方法
    public static string ToPascal(string s,int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(StringHelper.ToPascal(s1,3));
      Console.WriteLine(StringHelper.ToPascal(s2, 5));
    }
  }
}

使用扩展方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(s1.ToPascal(3));
      Console.WriteLine(s2.ToPascal(5));
    }
  }
  //扩展类,只要是静态就可以
  public static class ExtraClass
  {
    //扩展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal
    public static string ToPascal(this string s, int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
}

通过上面两种方法的比较:

    1.代码在访问ToPascal这样的静态方法时更为便捷。用起来就像是被扩展类型确实具有该实例方法一样。
    2.扩展方法不改变被扩展类的代码,不用重新编译、修改、派生被扩展类

定义扩展方法

    1.定义一个静态类以包含扩展方法。
    2.该类必须对客户端代码可见。
    3.将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
    4.方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。

请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。 您只需通过 n 为这两个形参提供实参。

注意事项:

    1.扩展方法必须在静态类中定义
    2.扩展方法的优先级低于同名的类方法
    3.扩展方法只在特定的命名空间内有效
    4.除非必要不要滥用扩展方法

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。


# C#  # 扩展方法  # C# 9.0新特性——扩展方法GetEnumerator支持foreach循环  # C# 扩展方法小结  # 简单介绍C# 中的扩展方法  # 详解C#扩展方法原理及其使用  # 深入理解C#中的扩展方法  # c#中的扩展方法学习笔记  # C#中反射和扩展方法如何运用  # 解析C#的扩展方法  # C#中this用法系列(二) 通过this修饰符为原始类型扩展方法  # C#中的扩展方法详解  # C# 扩展方法的使用  # 第一个  # 程序设计  # 其他的  # 转化为  # 到第  # 客户端  # 是一种  # 相关内容  # 是由  # 两种  # 感兴趣  # 这两个  # 数据结构  # 第二个  # 给大家  # 使其  # 请注意  # 因为它  # 该如何  # 只在 


相关文章: 网站制作公司广州有几家,广州尚艺美发学校网站是多少?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  ,网站推广常用方法?  如何基于云服务器快速搭建网站及云盘系统?  C++如何使用std::optional?(处理可选值)  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  实现虚拟支付需哪些建站技术支撑?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  宝塔建站后网页无法访问如何解决?  建站之星3.0如何解决常见操作问题?  建站之星安装后如何配置SEO及设计样式?  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星好吗?新手能否轻松上手建站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  图册素材网站设计制作软件,图册的导出方式有几种?  建站之星如何开启自定义404页面避免用户流失?  定制建站如何定义?其核心优势是什么?  装修招标网站设计制作流程,装修招标流程?  定制建站策划方案_专业建站与网站建设方案一站式指南  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  高防服务器租用指南:配置选择与快速部署攻略  如何用西部建站助手快速创建专业网站?  在线制作视频网站免费,都有哪些好的动漫网站?  建站主机选购指南:核心配置与性价比推荐解析  网站制作费用多少钱,一个网站的运营,需要哪些费用?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何用狗爹虚拟主机快速搭建网站?  c# 在高并发场景下,委托和接口调用的性能对比  如何在阿里云ECS服务器部署织梦CMS网站?  制作农业网站的软件,比较好的农业网站推荐一下?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  javascript中对象的定义、使用以及对象和原型链操作小结  如何在IIS7中新建站点?详细步骤解析  Python路径拼接规范_跨平台处理说明【指导】  宿州网站制作公司兴策,安徽省低保查询网站?  如何做网站制作流程,*游戏网站怎么搭建?  如何在宝塔面板中修改默认建站目录?  全景视频制作网站有哪些,全景图怎么做成网页?  广德云建站网站建设方案与建站流程优化指南  定制建站哪家更专业可靠?推荐榜单揭晓  高防服务器如何保障网站安全无虞?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  建站之星ASP如何实现CMS高效搭建与安全管理?  定制建站流程解析:需求评估与SEO优化功能开发指南  济南网站制作的价格,历城一职专官方网站?  建站主机核心功能解析:服务器选择与网站搭建流程指南  深入理解Android中的xmlns:tools属性  如何配置WinSCP新建站点的密钥验证步骤?  如何选择可靠的免备案建站服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。