zoukankan      html  css  js  c++  java
  • 《C#高效编程》读书笔记05-为类型提供ToString()方法

    System.Object.ToString()是.NET环境中最常用的方法之一。编写类型时,要提供一个合理的ToString版本,否则使用者就不得不自己构造一套可以阅读的表示。

    public class Customer
    {
        public string Name { get; set; }
        public decimal Revenue { get; set; }
        public string ContactPhone { get; set; }
        public override string ToString()
        {
            return string.Format("Name:{0},Revenue:{1, 10:C},ContactPhone:{2}", Name, Revenue, ContactPhone);
        }
    }
    

    虽然简单的ToString()方法很多时候已经可以满足为用户定义的类型显示文本信息的需求,但有时还会需要功能更强的方法。
    IFormattable接口包含了一个重载的ToString()方法,它允许为类型提供特定格式的信息。

    public class Customer : IFormattable
    {
        public string Name { get; set; }
        public decimal Revenue { get; set; }
        public string ContactPhone { get; set; }
        public override string ToString()
        {
            return string.Format("Name:{0},Revenue:{1, 10:C},ContactPhone:{2}", Name, Revenue, ContactPhone);
        }
        public string ToString(string format, IFormatProvider formatProvider)
        {
            if(formatProvider != null)
            {
                ICustomFormatter fmt = formatProvider.GetFormat(this.GetType()) as ICustomFormatter;
                if (fmt != null)
                    return fmt.Format(format, this, formatProvider);
            }
            switch (format)
            {
                case "n":
                    return Name;
                case "np":
                    return string.Format("{0},{1, 15}", Name, ContactPhone);
                default:
                    return Name;
            }
        }
    }
    

    这样,Customer的使用者即可自行定义其想要的输出格式:

    var c1 = new Customer();
    c1.Name = "Jack";
    c1.ContactPhone = "13800138000";
    Console.WriteLine("Customer record:{0}", c1.ToString("np", null));
    
  • 相关阅读:
    Android Api 检查參数状态Api
    【Jquery】prop与attr的差别
    【CODEFORCES】 A. Dreamoon and Sums
    使用<jsp:include>,不想写死URL,动态生成URL的解决的方法
    android.app.Activity 的介绍
    字符变换
    android之获取屏幕的宽度和高度
    2015跑过的路
    hdu5418--Victor and World(floyd+状压dp)
    解决PL/SQL Developer 连接oracle 11g 64位中的问题
  • 原文地址:https://www.cnblogs.com/kw13202/p/6767305.html
Copyright © 2011-2022 走看看