欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

.NET c#扩展方法

程序员文章站 2024-03-13 11:14:15
...

一.概念

  1. 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
  2. 要素
    (1)此方法必须是一个静态方法
    (2)此方法必须放在静态类中
    (3)此方法的第一个参数必须以this开头,并且指定此方法是扩展自哪个类型
  3. 扩展方法的特点:
    (1)扩展方法扩展自哪个类型,就必须是此类型的变量来使用,其他类型无法使用;
    (2)扩展方法中的this后面的参数不属于方法的参数,this后面的是指明扩展方法扩展自何种类型;
    (3)如果扩展方法和实例方法具有相同的签名,则优先调用实例方法;
    (4)扩展自父类上的方法,可以被子类的对象直接使用;
    (5)扩展自接口上的方法,可以被实现类的对象直接使用;
    (6)扩展方法最终还是被编译器编译成:静态类.静态方法();

二. 如何定义

1、创建一个静态类;
2、在其中创建一个静态方法;
3、为这个静态方法添加至少一个参数,并在第一个参数前加上this关键字,这个关键字会告诉编译器当前方法是一个扩展方法。而这个方法将成为第一个参数所属类型的新成员。
例:创建一个Student类,它包含了两个方法StuInfo,getStuInfo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _02例二
{
     public class Student
    {
        public string StuInfo()
        {
            return "学生基本信息";
        }
        public string getStuInfo(string stuName, string stuNum)
        {
            return string.Format("学生信息:\n" + "姓名:{0} \n" + "学号:{1}", stuName, stuNum);
        }
    }
}

再声明一个名为ExtensionStudentInfo的静态类,注意必须为静态,
这个类的作用就是包含一些我们想要扩展的方法,在此我们声明两个Student类型的扩展方法,Student类型为我们自定义的类型。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _02例二
{
    public static class ExtensionStudentInfo
    {
        public static string ExtensionStuInfo(this Student stuName)
        {
            return stuName.StuInfo();
        }
        public static string ExtensionGetStuInfo(this Student student,string stuname,string stusum)
        {
            return student.getStuInfo(stuname, stusum) + "\n读取完毕";
        }
    }
}

使用我们的扩展方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _02例二
{
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            string stuinfo = student.ExtensionStuInfo();
            Console.WriteLine(stuinfo);
            string stuinformation = student.ExtensionGetStuInfo("张三", "1881401008");
            Console.WriteLine(stuinformation);
            Console.ReadLine();
        }
    }
}

运行结果
.NET c#扩展方法
小结

  • 在C#中实现扩展方法的类必须是静态类且类的名称和实现扩展方法的类无关
  • 实现扩展方法的类方法必须是静态方法
  • 实现扩展方法的类方法的第一个参数必须是使用this关键字指明要实现扩展方法的类
  • 实现扩展方法应遵守就近原则,在最小的范围内使用扩展方法以避免造成“污染”