本文实例讲述了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小时内与您取得联系。