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项目
C# 扩展方法_第1张图片



第二步:新建一个CsharpExtendHelper.cs类

代码如下:

    /// 
    /// C# 扩展方法帮助类
    /// 注意:必须是静态类才可以添加扩展方法
    /// 
    public static class CsharpExtendHelper
    {
        /// 
        /// 声明扩展方法
        /// 注意:扩展方法必须是静态的
        /// this 必须有,string表示我要扩展的类型,val表示对象名,defaultVal参数
        /// 三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数
        /// 
        /// 
        /// 
        /// 
        /// 给string类型添加一个扩展方法:ToInt32,结果:转换失败赋值:defaultVal值
        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;
        }

        /// 
        /// 声明扩展方法
        /// 注意:扩展方法必须是静态的
        /// this 必须有,string表示我要扩展的类型,val表示对象名,defaultVal参数
        /// 三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数
        /// 
        /// 
        /// 
        /// 
        /// 给string类型添加一个扩展方法:Add,结果:给val值+defaultVal值
        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
            }
        }
    }
}


你可能感兴趣的:(C#,扩展方法)