C#扩展⽅法⽰例(this关键字)
扩展⽅法三要素: 静态类、静态⽅法、 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表⽰对象名
writeline方法的作用
//三个参数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)
{
StuInfo(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";
/
/这⾥就可以直接使⽤string类的扩展⽅法IsEmail了
Console.WriteLine(_myEmail.IsEmail());
//调⽤接收参数的扩展⽅法
Console.WriteLine(_myEmail.Quot("!"));
Console.ReadLine();
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。