3.8 扩展方法
什么是扩展方法
对于有源代码的类,可以直接修改代码,添加或修改method等内容,对于没有源代码的类想要修改代码怎么办,在这里就可以使用扩展方法
扩展方法允许改变一个类,但不需要该类的源代码
扩展方法是静态方法,是类的一部分,但实际上并没有放在类的源代码中
举个栗子
Money类
public class Money
{
public decimal Amount { get; set; }
public override string ToString()
{
return "$" + Amount.ToString();
}
}
扩展方法
public static class MoneyExtension
{
public static void AddToAmount(this Money money, decimal amountToAdd)
{
money.Amount += amountToAdd;
}
}
控制台中调用
Money cash1 = new Money();
// call extension
cash1.AddToAmount(50M);
Console.WriteLine("return: " + cash1.ToString());
Console.ReadLine();
结果
return $50
实现扩展方法
- 对于扩展方法,第一个参数是要扩展的类型,它放在this关键字后面,这是告诉编译器,这个方法是要扩展的类型的一部分,在扩展方法中,可以访问所扩展类型的所有公有方法的和属性
- 扩展方法实现类必须是一个静态类,实现的扩展方法也必须是静态方法.
- 在调用程序中,AddToAmount()方法看起来像是另一个方法,他没有显示第一个参数,也不能对它进行任何处理.
- 即使扩展方法是静态的,也要使用标准的实例方法语法(使用类的实例来调用)
- 如果扩展方法与类中的某个方法同名,就从来不会高用扩展方法,类中已有的任何实例方法优先.