小编给大家分享一下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#中扩展方法的示例分析
网站URL:http://lswzjz.com/article/ijcodi.html