C#2.0 使用委托推断扩展委托的语法
下面是示例 一个货币结构
代理的方法可以是实例的方法,也可以是静态方法,声明方法不同
实例方法可以使用委托推断,静态方法不可以用
示例代码:
/* * C#2.0 使用委托推断扩展委托的语法 * 下面是示例 一个货币结构 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C7._1._2_2 { //一个货币结构 struct Currency { //美元 public uint Dollars; //美分 public ushort Cents; //构造函数 public Currency(uint dollars, ushort cents) { this.Dollars = dollars; this.Cents = cents; } //重写TOSTRING方法 public override string ToString() { return string.Format("${0}.{1,-2:00}", Dollars, Cents); } //静态方法 public static string GetCurrencyUnit() { return "Dollars"; } //强制转换float -> Currency public static explicit operator Currency(float value) { checked { uint dollars = (uint)value; ushort cents = (ushort)((value - dollars) * 100); return new Currency(dollars, cents); } } //隐式转换 Currency -> float public static implicit operator float(Currency value) { return value.Dollars + (value.Cents / 100.0f); } //隐式转换 uint -> Currency public static implicit operator Currency(uint value) { return new Currency(value, 0); } //隐式转换 Currency -> uint public static implicit operator uint(Currency value) { return value.Dollars; } } class Program { private delegate string GetAString(); static void Main(string[] args) { int x = 10; //委托推断 GetAString test = new GetAString(x.ToString); C#2.0以后可以这样 GetAString test = x.ToString; Console.WriteLine("Get the string is {0}", test()); Currency balance = new Currency(34, 50); //TEST 指向的是一个实例方法 test = balance.ToString; Console.WriteLine("Get the string is {0}", test()); //TEST指向的是一个静态方法,注意声明方法不一样,不可以使用委托推断
test = new GetAString(Currency.GetCurrencyUnit); Console.WriteLine("Get the string is {0}", test()); Console.ReadLine(); } } }