扩展方法三要素: 静态类、静态方法、 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。//使用扩展方法的时候必须保证扩展方法类已经在当前代码中usingnamespace 扩展方法{//扩展方法必须是静态的public static class StringHelper{//扩展方法必须是静态的,第一个参数必须加上thispublic 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(); } }} |
|
来自: goodwangLib > 《C#高级应用》