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(); } } }
  • 相关阅读:
    springboot 项目部署到服务器
    Thymeleaf的注意项
    springboot定时器
    springboot
    随笔
    mysql数据库连接超过8小时失效的解决方案(springboot)
    Druid连接池与spring配置
    IDEA快捷键
    jsonp解决跨域,用div,css,js,jq实现textarea自适应高度
    mysql的查询、子查询及连接查询(商城查询常用)
  • 原文地址:https://www.cnblogs.com/aocshallo/p/3716882.html
Copyright © 2011-2022 走看看