C#的扩展方法
什么是C#的扩展方法:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
就是为一个现有类型添加一个方法,现有类型既可以是int,string,DataRow,DataTable等数据类型,也可以是自定义的数
据类型。
一般来说,int数据类型有个ToString()的方法,就是把int类型数据转换为字符串类型的数据,比如现在我们想在转换成字
符串的时候还添加自定义字符串.那么之前的Tostring就不好使了,因为它只是它我们的int数据转换为string类型的,却并不能
添加自定义字符串.所以这就要用到所谓的扩展方法了。
C#的扩展方法需要注意的:
1.必须是静态(static)类才可以添加扩展方法
2.扩展方法必须是静态的(static)
看第二步:扩展方法规定类必须是一个静态类,CsharpExtendHelper是一个静态类,里面包含的所有方法都必须是静态方法。
msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该
方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”
CsharpExtendHelper类里有一个ToInt32的静态方法,他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置。
这句话什么意思,即你需要对string扩展一个ToInt32方法,this是string实例化后的对象。
第一步:新建一个Demo项目
第二步:新建一个CsharpExtendHelper.cs类
代码如下:
/// <summary>
/// C# 扩展方法帮助类
/// 注意:必须是静态类才可以添加扩展方法
/// </summary>
public static class CsharpExtendHelper
{
/// <summary>
/// 声明扩展方法
/// 注意:扩展方法必须是静态的
/// this 必须有,string表示我要扩展的类型,val表示对象名,defaultVal参数
/// 三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数
/// </summary>
/// <param name="val"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
/// <remarks>给string类型添加一个扩展方法:ToInt32,结果:转换失败赋值:defaultVal值</remarks>
public static int ToInt32(this string val, int defaultVal)
{
int result = defaultVal;
if (string.IsNullOrEmpty(val))
return result;
int.TryParse(val, out result);
return result;
}
/// <summary>
/// 声明扩展方法
/// 注意:扩展方法必须是静态的
/// this 必须有,string表示我要扩展的类型,val表示对象名,defaultVal参数
/// 三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数
/// </summary>
/// <param name="val"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
/// <remarks>给string类型添加一个扩展方法:Add,结果:给val值+defaultVal值</remarks>
public static string Add(this string val, string defaultVal)
{
return val + defaultVal;
}
}
第三步:调用代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CsharpExtend.Common; //引用
namespace CsharpExtend
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str1 = "123";
str1.ToInt32(0);//这个就是我们自己定义的扩展方法ToInt32
Response.Write(str1);//结果:123
string str2 = "yangfeizai";
str2.ToInt32(0);//这个就是我们自己定义的扩展方法ToInt32
Response.Write(str2);//结果:0
string str3 = "jayzai";
str3.Add(" love zhanglin"); //这个就是我们自己定义的扩展方法Add
Response.Write(str2);//结果:jayzai love zhanglin
}
}
}
}