C# 扩展方法

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
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值