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(); } } }

 

你可能感兴趣的:(sha)