zoukankan      html  css  js  c++  java
  • C# this扩展方法

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

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

    C#扩展方法第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。

    C# this扩展方法实例

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

     
    C# 代码   复制
    
           //必须是静态类才可以添加扩展方法
           Static class Program
           {
            static void Main(string[] args)
            {
                string str = "quzijing";
                //注意调用扩展方法,必须用对象来调用 
                string Newstr = str.Add();
                Console.WriteLine(Newstr);
                Console.ReadKey();
            }
            //声明扩展方法
            //扩展方法必须是静态的,Add有三个参数
            //this 必须有,string表示我要扩展的类型,stringName表示对象名
            //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,//再增加一个变量即可
    
            public static  string  Add(this string stringName)
            {
                return stringName+"a";
            }
    }
    

    实例2、给自定义的类型增加一个扩展方法,并增加一个传递的参数

    (1)、声明一个Student类,它包含了两个方法StuInfo,getStuInfo

     
     
    C# 代码   复制
    
        public class Student
        {
            public string StuInfo()
            {
                return "学生基本信息";
            }
            public  string getStuInfo(string stuName, string stuNum)
            {
           return string.Format("学生信息:\n" + "姓名:{0} \n" + "学号:{1}", stuName, stuNum);
            }
         }
    

    (2)、声明一个名为ExtensionStudentInfo的静态类,注意必须为静态

    这个类的作用就是包含一些我们想要扩展的方法,在此我们声明两个Student类型的扩展方法,Student类型为我们自定义的类型。

     
     
    C# 代码   复制
    
        public static class ExtensionStudentInfo
        {
            //声明扩展方法
            //要扩展的方法必须是静态的方法,Add有三个参数
            //this 必须有,string表示我要扩展的类型,stringName表示对象名
            //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,再增加一个变量即可
            public static string ExtensionStuInfo(this Student stuName)
            {
                return stuName.StuInfo();
            }
            //声明扩展方法
            //要扩展的方法必须是静态的方法,Add有三个参数
            //this 必须有,string表示我要扩展的类型,stringName表示对象名
            //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,在此我们增加了两个string类型的参数
            public static string ExtensionGetStuInfo(this Student student, string stuname, string stunum)
            {
                return student.getStuInfo(stuname, stunum)+"\n读取完毕";
            }
        }
    

    (3)、使用自定义类的扩展方法,注意必须要用对象来调用扩展方法

     
     
    C# 代码   复制
    
            static void Main(string[] args)
            {
                Student newstudent = new Student();
                //要使用对象调用我们的扩展方法
                string stuinfo = newstudent.ExtensionStuInfo();
                Console.WriteLine(stuinfo);
                //要使用对象调用我们的扩展方法
                string stuinformation = newstudent.ExtensionGetStuInfo("quzijing", "20081766");
                Console.WriteLine(stuinformation);
                Console.ReadKey();
            }
    

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

    (1)、扩展方法

     
     
    C# 代码   复制
    
    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)、使用方法

     
    C# 代码   复制
    
    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();
    
            }
    
        }
    
    }
    
  • 相关阅读:
    如何去掉NavigationBar的backButton
    iDoubs的编译问题以及解决方案
    【五一呈献】通用高性能 Windows Socket 组件 HPSocket v2.1.1 正式发布
    PortalBasic Java Web 应用开发框架:应用篇(十三) —— REST Convention
    如何养成良好的 C++ 编程习惯(一)—— 内存管理
    PortalBasic Java Web 应用开发框架:应用篇(十一) —— 整合 Spring
    整理发布本人所有博客文章中涉及的代码与工具(大部分是C++和Java)
    PortalBasic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
    【双旦献礼】PortalBasic Java Web 应用开发框架 v3.0.1 正式发布(源码、示例及文档)
    PortalBasic Java Web 应用开发框架:应用篇(十二) —— Action Convention
  • 原文地址:https://www.cnblogs.com/opop/p/5553803.html
Copyright © 2011-2022 走看看