扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
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 + "\nAge: " + this.Age; } } public static class ExtendMehods { //使用this 关键字扩展类的方法 public static string Hello(this Student stu) { return "嗨!大家好!我叫 " + stu.Name + ",我今年 " + stu.Age + " 岁"; } }}