首页 > 代码库 > Csharp 高级编程 C7.1.2(2)
Csharp 高级编程 C7.1.2(2)
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(); } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。