扩展方法

扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的public成员。

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

1.this扩展方法 

必须是静态类才可以添加扩展方法     :声明扩展方法的步骤:类必须是static,方法是static

实例1、给string 类型增加一个Add方法,该方法的作用是给字符串增加一个字母a

第一步:声明扩展方法

//声明扩展方法

//扩展方法必须是静态的(是否有参数),Add有三个参数:this 必须有,string表示我要扩展的类型,stringName表示对象名

//三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,再增加一个变量即可

public static  string  Add(this string stringName)//在调用是stringName接受str的值                            this string:表示为string添加一个add方法
        {
            return stringName+"a";
        }
第二步:调用扩展方法,必须用对象来调用   
 Static class Program
       {
        static void Main(string[] args)
        {
            string str = "quzijing";
            //注意调用扩展方法,必须用对象来调用 
            string Newstr = str.Add();
            Console.WriteLine(Newstr);
            Console.ReadKey();
        }

实例2、为string扩展一个验证邮件类

(1)、扩展方法

            
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Text.RegularExpressions;

 

//声明扩展方法的步骤:类必须是static,方法是static,

//第一个参数是被扩展的对象,前面标注this。

//使用扩展方法的时候必须保证扩展方法类已经在当前代码中using

namespace 扩展方法

{

    //扩展方法必须是静态的

    public static class StringHelper

    {

        //扩展方法必须是静态的,第一个参数必须加上this

        public static bool IsEmail(this string _input)

        {

            return Regex.IsMatch(_input, @"^\\w+@\\w+\\.\\w+$");

        }

        //带多个参数的扩展方法

        //在原始字符串前后加上指定的字符

        public static string Quot(this string _input, string _quot)

        {

            return _quot + _input + _quot;

        }

    }

}

        

(2)、使用方法

            
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 扩展方法

{

    class Program

    {

        static void Main(string[] args)

        {

            string _myEmail = "abc@163.com";

            //这里就可以直接使用string类的扩展方法IsEmail了

            Console.WriteLine(_myEmail.IsEmail());

            //调用接收参数的扩展方法

            Console.WriteLine(_myEmail.Quot("!"));

            Console.ReadLine();

        }

    }

}

        

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决uni-app props 传递数组修改后不能使用问题

    现象为:在setTimeout()中修改值,但是对 items这个数组并不起作用,即修改后的数组与原来一致,并没有达到修改数组的效果,代码如下:

    wfaceboss
  • JavaScript继承与聚合

    (1)call方法可以将一个函数的对象上下文从初始化变成由this来决定                     一个类去控制另一个类

    wfaceboss
  • JavaScript中的this基本问题

    在函数中 this 到底取何值,是在函数真正被调用执行的时候确定下来的,函数定义的时候确定不了。 

    wfaceboss
  • 用 JavaScript 实现链表

    单链表是表示一系列节点的数据结构,其中每个节点指向链表中的下一个节点。 相反,双向链表具有指向其前后元素的节点。

    前端小智@大迁世界
  • QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文教程

    QT是一个非常强大的图形用户界面应用程序开发框架,但是它现在不是很主流。虽然这样但是它的应用领域还是非常的广,特别是应用在嵌入式领域,非常多的公司喜欢用它来做界...

    黑泽君
  • 进来测测分析能力

    这是陈老师测试新人的一个脑筋急转弯。如果一对一的话,被问到同学往往警惕性比较高,回答的质量也相对高。所以最好的测试方法是在大家吃完午饭闲聊的时候,冷不丁的丢到人...

    接地气的陈老师
  • RSA 创新沙盒盘点| Securiti.ai——解决隐私合规痛点的一站式自动化方案

    2020年2月24日-28日,网络安全行业盛会RSA Conference将在旧金山拉开帷幕。在RSAC官方宣布入选今年创新沙盒十强初创公司中,前面已经为大家介...

    绿盟科技研究通讯
  • django实战(一)--dango自带的分页(极简)

    技术总结:最基本的是Paginator里面的一些值(当然此处我并没有去尝试其他的,有兴趣的可以去搜下,也挺简单的)。然后其中的一个就是前端pn值如何通过url传...

    绝命生
  • 大数据开发体系,进来了解一下?

    掌握Linux必备知识,熟悉Python的使用与爬虫程序的编写,搭建Hadoop(CDH)集群,为大数据技术学习打好基础。

    王知无
  • 动态规划问题-LeetCode 91、72(动态规划方程)

    一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 … 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法...

    算法工程师之路

扫码关注云+社区

领取腾讯云代金券