C# 之 扩展方法

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

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


不使用扩大方法:

<span style="font-size:10px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExtraMethod
{
//抽象出静态StringHelper类
public static class StringHelper
{
//抽象出来的将字符串第1个字符大写,从第1个到第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));
}
}
}</span>

使用扩大方法:

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这样的静态方法时更加便捷。用起来就像是被扩大类型确切具有该实例方法1样。
    2.扩大方法不改变被扩大类的代码,不用重新编译、修改、派生被扩大类
    

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


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



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

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » C# 之 扩展方法
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡