3.8扩展方法 如果有类的源码,继承是给对象添加功能的方法 如果没有类的源码,可使用扩展方法,允许改变一个类 /**** 源码 star ****/ using System; /// <summary> ///MainEntryPoint 的摘要说明 /// </summary> public class Money { //标示货币的预定义类型 //成员字段 private decimal amount; //属性 public decimal Amount { get { return amount; } set { amount = value; } } //重写父类System.Object的ToString()方法 //方法 public override string ToString() { return "$" + Amount.ToString(); } //构造函数 public Money() { } } /**** 源码 end ****/ /**** 扩展源码中的方法 star ****/ public static class MoneyExtension { /* 扩展方法是静态方法,是类的一部分,但实际没放在类的源码中 由于某种原因,程序最初源码不可直接修改,可创建一静态类, 把静态方法AddToAmount加入 */ /// <summary> /// 静态方法 /// </summary> /// <param name="money">要扩展的类型,this是告诉编译器,次方法是Money的一部分</param> /// <param name="amoutToAdd"></param> public static string AddToAmount(this Money money, decimal amoutToAdd) { money.Amount += amoutToAdd; return money.ToString(); } /* 注:1.扩展方法是静态的,要要用标准示例方法,不显示第一个参数 2.扩展方法与类中某方法同名,扩展方法不会调用,以类中已有实例方法优先 */ } /**** 扩展源码中的方法 end ****/ //实例化对象 Money m = new Money(); m.Amount = 40; //调用重载方法 Response.Write(m.ToString()); //调用扩展方法 Response.Write(m.AddToAmount(30));