加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

C# 之 扩展技巧

发布时间:2021-12-11 11:10:03 所属栏目:PHP教程 来源:互联网
导读:扩展方法 扩展方法使您能够向现有类型添加方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在

扩展方法
 
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 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));
        }
    }
}
 
C# 之 扩展方法
 
使用扩展方法:
 
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);
        }
    }
}
 
C# 之 扩展方法
 
通过上面两种方法的比较:
    1.代码在访问ToPascal这样的静态方法时更为便捷。用起来就像是被扩展类型确实具有该实例方法一样。
    2.扩展方法不改变被扩展类的代码,不用重新编译、修改、派生被扩展类
   
定义扩展方法
    1.定义一个静态类以包含扩展方法。
    2.该类必须对客户端代码可见。
    3.将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
    4.方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
 
请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。 您只需通过 n 为这两个形参提供实参。
 
注意事项:
    1.扩展方法必须在静态类中定义
    2.扩展方法的优先级低于同名的类方法
    3.扩展方法只在特定的命名空间内有效
    4.除非必要不要滥用扩展方法

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读