扩展方法的本质:实际上就是静态方法
注意:
1、这个类必须是静态类 【关于扩展方法,为什么要定义的在静态类中,是因为在内存中找到这个方法的速度会更快,这样就提高了性能】
2、至少要有一个参数,这个参数就是this
3、静态类中的方法必须为静态方法
调用静态方法的顺序:
当一个类中的方法名和方法参数和静态类中的方法名完全一样,这时候,调用的先后顺序是:先调用此类中的方法,如果没有找到此方法,就会去找扩展方法
扩展方法其实就是C#的一种语法糖
1、第一步:定义了一个类:Dog
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Dog 2 { 3 /// <summary> 4 /// DogId 5 /// </summary> 6 public int DogId { get; set; } 7 8 /// <summary> 9 /// 姓名 10 /// </summary> 11 public string DogName { get; set; } 12 13 /// <summary> 14 /// 年龄 15 /// </summary> 16 public int DogAge { get; set; } 17 18 /// <summary> 19 /// 玩具 20 /// </summary> 21 public string DogToy { get; set; } 22 23 public override string ToString() 24 { 25 string str = string.Empty; 26 str = "我的号码是:" + DogId + "号;我的名字叫:" + DogName + ";我今年" + DogAge + "岁;" + "我喜欢玩:" + DogToy; 27 return str; 28 }
2、第二步:定义个扩展类:DogExtend
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void SayHi(this Dog dogObj) 2 { 3 string str = "大家好,我叫" + dogObj.DogName + ";很高兴认识大家"; 4 MessageBox.Show(str); 5 }
3、第三步:调用扩展方法 【写了一个测试单元】
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class UnitTest1 2 { 3 [TestMethod] 4 public void TestMethod1() 5 { 6 Dog d = new Dog() { DogId = 1, DogName = "小白", DogAge = 10, DogToy = "小球" }; 7 DogExtend.SayHi(d); 8 9 d.SayHi(); 10 } 11 }