码迷,mamicode.com
首页 > Windows程序 > 详细

EffectiveC#5--始终提供ToString()

时间:2015-10-07 22:56:05      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

1.System.Object版的ToString()方法只返回类型的名字

2.知道要重写它,返回更有意义的信息,最好是提供几个重载版本.

3.当你设计更多的复杂的类型时(格式化文本)应该实现应变能力更强的IFormattable.ToString()

4.例子

public class Customer : IFormattable
    {
        //属性字段省略...

        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 "r":
                    return Revenue.ToString();
                case "p":
                    return ContactPhone;
                case "nr":
                    return string.Format("{0,20},{1,10:C}", Name, Revenue);
                case "np":
                    return string.Format("{0,15},{1,10:C}", Name, ContactPhone);
                case "n":
                case "G":
                default:
                    return Name;
            }
        }
    }

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

1             IFormattable c1 = new Customer();
2             Console.WriteLine("Customer record:{0}", c1.ToString("nr", null));

 首先我们必须支持表示通用格式的"G";其次我们必须支持两种格式的空格式,即" "和null。这三种格式返回字符串都必须和Ojbect.ToString()的覆写版本的字符串相同。实现了IFormattable接口的类型,.NET BCL都会调用IFormattable()而不是Object.ToString()。

EffectiveC#5--始终提供ToString()

标签:

原文地址:http://www.cnblogs.com/tiantianle/p/4859629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!