zoukankan      html  css  js  c++  java
  • 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(); } } }
  • 相关阅读:
    Thinhole类声明和实现
    Pinhole类声明和实现
    Camera类定义和实现
    同心映射定义和测试
    Hammersley采样类定义和测试
    NRooks采样类定义和测试
    MultiJittered采样类定义和测试
    Jittered采样类定义和测试
    git分支操作
    Git单人本地仓库操作
  • 原文地址:https://www.cnblogs.com/aocshallo/p/3716882.html
Copyright © 2011-2022 走看看