本文实例讲述了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# 扩展方法的使用
# 第一个
# 程序设计
# 其他的
# 转化为
# 到第
# 客户端
# 是一种
# 相关内容
# 是由
# 两种
# 感兴趣
# 这两个
# 数据结构
# 第二个
# 给大家
# 使其
# 请注意
# 因为它
# 该如何
# 只在
相关文章:
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
宝塔建站助手安装配置与建站模板使用全流程解析
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
香港服务器网站卡顿?如何解决网络延迟与负载问题?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站主机类型有哪些?如何正确选型
如何快速生成专业多端适配建站电话?
建站之星好吗?新手能否轻松上手建站?
如何通过服务器快速搭建网站?完整步骤解析
如何通过远程VPS快速搭建个人网站?
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何零基础开发自助建站系统?完整教程解析
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
建站10G流量真的够用吗?如何应对访问高峰?
建站之星下载版如何获取与安装?
建站之星代理平台如何选择最佳方案?
企业微网站怎么做,公司网站和公众号有什么区别?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
建站之星各版本价格是多少?
建站之星后台密码遗忘如何找回?
如何快速生成凡客建站的专业级图册?
c# await 一个已经完成的Task会发生什么
建站主机是什么?如何选择适合的建站主机?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何用y主机助手快速搭建网站?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何快速搭建响应式可视化网站?
招商网站制作流程,网站招商广告语?
如何选择高效可靠的多用户建站源码资源?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
海南网站制作公司有哪些,海口网是哪家的?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
网站制作话术技巧,网站推广做的好怎么话术?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
教学网站制作软件,学习*后期制作的网站有哪些?
无锡营销型网站制作公司,无锡网选车牌流程?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
建站之星代理商如何保障技术支持与售后服务?
实现虚拟支付需哪些建站技术支撑?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何在Ubuntu系统下快速搭建WordPress个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。