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()的更多相关文章

  1. Effective Java 第三版——12. 始终重写 toString 方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ

    从JAVA核心技术卷轴Ⅰ:基础知识中整理得到. import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; i ...

  3. 《C#高效编程》读书笔记05-为类型提供ToString()方法

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

  4. 读书笔记--《Effective C#》总结

    值得推荐的一本书,适合初中级C#开发人员 第1章 C#语言元素 原则1:尽可能的使用属性(property),而不是数据成员(field) ● 属性(property)一直是C#语言中比较有特点的存在 ...

  5. ToString(string format)输出格式简述

    ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...

  6. Effective C#中文版

    我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...

  7. Java I/O解读与使用实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲解了Java I/O解读与使用实例. 一.I/O基本概念 I/O全称是Inpu ...

  8. Effective C# Chapter1-Language Elements

    <EffectiveC#>这本书讲了一些关于C#语言的使用技巧和经验. 该系列文章是备忘录和自己的一些见解.程序猿们最喜欢这类问题了,欢迎讨论~ 菜单 Item 1 使用属性取代公共成员变 ...

  9. Java快速扫盲指南

    文章转自:https://segmentfault.com/a/1190000004817465#articleHeader22 JDK,JRE和 JVM 的区别 JVM:java 虚拟机,负责将编译 ...

随机推荐

  1. WebApi2官网学习记录---Content Negotiation

    Content Negotiation的意思是:当有多种Content-Type可供选择时,选择最合适的一种进行序列化并返回给client. 主要依据请求中的Accept.Accept-Charset ...

  2. (转)添加服务引用和添加Web引用对比

    在WindowsForm程序中添加服务引用和Web引用对比 为了验证书上有关Visual Studio 2010添加服务引用和Web引用的区别,进行实验. 一.建立一个Web服务程序项目新建项目,选择 ...

  3. c#中将默认常量(32bit)转换为8bit

    // //将int进制转换 // private byte hex(int myHex) { byte[] a = BitConverter.GetBytes(myHex); return a[0]; ...

  4. (转) How to install eclipse in ubuntu 12.04

    源地址:http://www.krizna.com/ubuntu/install-eclipse-in-ubuntu-12-04/ Eclipse installation in ubuntu 12. ...

  5. 对面向对象程序设计(OOP)的认识

    前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发 ...

  6. fiddler2使用文档

    http://www.trinea.cn/android/android-network-sniffer/

  7. Even Tree

    Link: https://www.hackerrank.com/challenges/even-tree def search(a,b): # 根据核心算法和题目要求要筛选边 seen = {} s ...

  8. Python Tcp Socket

    socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...

  9. centos在安装apache2.4版本的时候遇到ARP not found解决办法

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  10. HDU 4035 Maze(树形概率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:一棵树,从结点1出发,在每个结点 i 都有3种可能:(1)回到结点1 , 概率 Ki:(2 ...