扩展方法

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

1.可以使用扩展方法来扩展类或接口,但不能重写扩展方法。

  2.与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。

  3.编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。

    换句话说,如果某个类型具有一个名为Process(int i) 的方法,而您有一个具有相同签名的扩展方法,则编译器总是绑定该实例方法。

  4.当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。

    如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var stu = new Student() { Name = "joey", Age = 25 };
            //调用实例方法
            Console.WriteLine(stu.ToString());
            //调用扩展方法 。调用的时候会vs 智能感知会在方法边上加个向下的箭头,表示这是一个扩展方法
            Console.WriteLine(stu.Hello());
        }
    }
    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        //重写ToString方法
        public new string ToString()
        {
            return "Name: " + this.Name + "
Age: " + this.Age;
        }
    }

    public static class ExtendMehods
    {
        //使用this 关键字扩展类的方法
        public static string Hello(this Student stu)
        {
            return "嗨!大家好!我叫 " + stu.Name + ",我今年 " + stu.Age + "";
        }
    }
}
原文地址:https://www.cnblogs.com/ecollab/p/6225183.html