相关文章导航
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
Flex,Fms3相关文章索引
FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8>
.NET Framework提供了方法,能够将任何数值、枚举以及日期和时间等基数据类型表示为字符串 
格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值 
例如,格式说明符指示:是否应该用科学记数法来表示格式化的数字 
例如:格式字符"C",说明货币格式 
同时.NET Framework还使用区域性设置,以便用适合于特定区域性的形式表示基类型。 
我们可以提供自定义的区域性设置,或者使用与当前线程关联的默认区域性设置。 
例如,格式化货币类型的时候,区域性设置指定用于货币符号 
要是我们想拥有自己定义的格式化,.NET Framework也允许我们定义自己格式化方案和自定义区域性设置。 
例如:我想格式字符"MyFormat",来说明我自定义的格式,即在字符前加三个*** 
关于数字格式字符串,可以参考类 
System.Globalization.NumberFormatInfo 
关于日期与时间格式字符串,可以参考类 
System.Globalization.DateTimeFormatInfo 
先看看IFormattable接口的原型 
public interface IFormattable 
// Methods 
string ToString(string format, IFormatProvider formatProvider); 
参数说明: 
format 
指定要使用的格式的 String 
当为空引用时,表示使用为 IFormattable 实现的类型定义的默认格式 
formatProvider 
用于格式化该值的 IFormatProvider 
当为空引用时,从操作系统的当前区域设置中获取格式信息的
一些基本的值类型实现了该接口,例如: 
Int32 ,UInt32 , DateTime ,Guid ,类Enum 
再看看IFormatProvider接口的原型 
public interface IFormatProvider 
// Methods 
object GetFormat(Type formatType); 
参数说明: 
formatType 
一个对象,它指定要获取的格式对象的类型
NumberFormatInfo、DateTimeFormatInfo和CultureInfo实现IFormatProvider接口
NumberFormatInfo提供数字格式信息,如用于小数分隔符和千位分隔符的字符,以及货币值中货币符号的拼写和位置 
DateTimeFormatInfo提供与日期相关和与时间相关的格式信息,如日期模式中月、日和年的位置 
CultureInfo包含特定区域性中的默认格式信息,其中包括数字格式信息以及与日期相关和与时间相关的格式信息 
再看看ICustomFormatter接口的原型 
public interface ICustomFormatter 
// Methods 
string Format(string format, object arg, IFormatProvider formatProvider); 
参数说明: 
format 
包含格式规范的格式字符串 
arg 
要格式化的对象 
formatProvider 
一个 IFormatProvider 对象,它提供有关当前实例的格式信息
在arg为空引用时,引发异常 
如果 format 为空引用 ,将使用默认格式规范 
如果 formatProvider 为空引用 ,则忽略该参数 
好了,说了这么多 
我们来动手来实现格式字符"MyFormat",在字符前加三个***的需求
定义一个类
using System; 
namespace MyFormat 
public class MyClass : System.IFormattable 
Double d; 
public MyClass(Double d) 
this.d=d; 
public string ToString(string format, IFormatProvider formatProvider) 
return (format=="MyFormat")?"***"+d.ToString(formatProvider):d.ToString(format,formatProvider); 
}
再到一控制台中
System.Globalization.CultureInfo culture=null; 
MyClass myClass=new MyClass(5); 
//当IFormatProvider为空时,调用的是当前线程关联的文化信息 
Console.WriteLine("显示中国货币格式:{0}",myClass.ToString("C",null)); 
culture=System.Globalization.CultureInfo.CurrentCulture; 
Console.WriteLine("显示当前系统默认货币格式:{0}",myClass.ToString("C",culture)); 
culture=new System.Globalization.CultureInfo("zh-HK"); 
Console.WriteLine("显示香港特别行政区货币格式:{0}",myClass.ToString("C",culture)); 
Console.WriteLine("显示我自己定义的货币格式:{0}",myClass.ToString("MyFormat",null)); 
Console.ReadLine();
效果如下: 
如果希望自定义格式化能在多个不同类使用,那么实现我们应该实现ICustomFormatter接口
定义一个类
using System; 
namespace MyFormat 
public class MyBaseFormat : System.ICustomFormatter, System.IFormatProvider 
//如果format Type与当前实例类型相同,则为当前实例,否则为空引用 
public object GetFormat(Type format) 
if (format == typeof (ICustomFormatter)) 
return this; 
return null; 
//实现Format方法说明: 
//如果您的格式方法不支持格式,则确定正在设置格式的对象是否实现 IFormattable 接口。 
//如果实现,请调用该接口的IFormattable.ToString 方法。 
//否则,调用基础对象的默认 Object.ToString 方法。 
public string Format (string format, object arg, IFormatProvider provider) 
if (format == null) 
if (arg is IFormattable) 
return ((IFormattable)arg).ToString(format, provider); 
return arg.ToString(); 
else 
if (format=="MyBaseFormat")   
return "***"+arg.ToString(); 
else 
if (arg is IFormattable) 
return ((IFormattable)arg).ToString(format, provider); 
return arg.ToString(); 
到一控制台中
string printString=String.Empty; 
int i=100; 
MyBaseFormat myBaseFormat=new MyBaseFormat(); 
printString=string.Format(myBaseFormat,"显示正常格式:{0}",i); 
Console.WriteLine(printString); 
printString=string.Format(myBaseFormat,"显示正常格式:{0:C}",i); 
Console.WriteLine(printString); 
printString=string.Format(myBaseFormat,"显示自定义格式{0:MyBaseFormat}",i); 
Console.WriteLine(printString); 
Console.ReadLine(); 
效果如下: 
小总结: 
1.如果需要您自己的格式化包含在某个类上,在该类上实现IFormattable接口 
2.如果希望自定义格式化并使它可供多个不同类使用,那么实现 ICustomFormatter接口
希望上面提到的知识对你有所提示 
当然欢迎交流和指正
blog: 
http://www.cnblogs.com/aierong 
author:aierong 
email:aierong@126.com 
写随笔费时又费力,请尊重作者的权利 
谢谢!
收藏与分享
收藏到QQ书签 添加到百度搜藏 添加到百度搜藏 添加到雅虎收藏 分享到饭否 收藏到就喜欢网络收藏夹 
RSS订阅我 什么是RSS?
feedsky    http://wap.feedsky.com/aierongrss    E-mail 
订阅到雅蛙        使用RSS邮天下订阅    订阅到有道阅读 
订阅到抓虾    鲜果阅读器订阅图标    Add to Google 
訂閱 Bloglines    哪吒提醒    Subscribe in NewsGator Online
东莞.net俱乐部
东莞.net俱乐部 欢迎您的加入
我的系列文章
A.Sql Server2005 Transact-SQL 新兵器学习 
B.MCAD学习 
C.代码阅读总结 
D.ASP.NET状态管理 
E.DB(数据库) 
F.WAP 
G.WinForm 
H.Flex
我的好文推荐
FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8> 
Sql Server2005 Transact-SQL 新兵器学习总结之-总结 
MS SQL数据库备份和恢复存储过程(加强版本) 
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结) 
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现) 
WAP开发资料站(最新更新) 
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现) 
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结) 
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法) 
Mcad学习笔记之序列化(2进制和Soap序列 化) 
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨) 
ASP.NET状态管理之一(概括篇) 
Flex,Fms学习笔记
本文转自aierong博客园博客,原文链接:http://www.cnblogs.com/aierong/archive/2005/04/26/145617.html,如需转载请自行联系原作者

自定义格式字符串随笔(IFormattable,IFormatProvider,ICustomFormatter三接口的实现)相关推荐

  1. 『飞鸽』彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter

    彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter 自从使用.net以来就一直都在使用string.Format方法,一直 ...

  2. (转)彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter

    此文转自喆 喆的博客,原文链接地址:http://www.cnblogs.com/szp1118/archive/2010/07/31/1789148.html 自从使用.net以来就一直都在使用st ...

  3. 自定义数字格式字符串_部分分隔符和条件格式

    部分分隔符和条件格式 可以根据值为正.为负还是为零来为字符串应用不同的格式化.为产生这种行为,自定义格式字符串可以包含最多三个用分号分隔的部分.下表描述了这些部分. 部分数目 说明 一个部分 格式字符 ...

  4. C#中string.format用法详解 格式字符串

    string.Format对C#字符串格式化 String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 ...

  5. DateTime 格式字符串

    标准 DateTime 格式字符串 详见:http://msdn.microsoft.com/zh-cn/library/az4se3k1(VS.80).aspx 格式说明符 名称 说明 d 短日期模 ...

  6. 自定义数字格式字符串输出示例

    自定义数字格式字符串输出示例 MSDN 下表阐释了通过给特定数据类型和值应用某些自定义数字格式字符串来创建的输出.输出是通过使用 ToString 方法和美国英语 (en-US) 区域性生成的. &q ...

  7. C#自定义数字格式字符串

    格式字符 名称 说明 0 零占位符 如果格式化的值在格式字符串中出现"0"的位置有一个数字,则此数字被复制到输出字符串中.小数点前最左边的"0"的位置和小数点后 ...

  8. 将字符串转为日期格式yyyy-MM-dd||自定义格式

    将字符串转为日期格式yyyy-MM-dd||自定义格式 /*** 将字符串格式转日期,如:yyyy-MM-dd ||自定义格式** @param date 日期字符串* @param dateForm ...

  9. python自动化之文件处理_Python自动化办公之Word批量转成自定义格式的Excel

    作者:青春阳光king python实现word转成自定义格式的excel文档(解决思路和代码)支持按照文件夹去批量处理,也可以单独一个文件进行处理,并且可以自定义标识符. 最近在开发一个答题类的小程 ...

最新文章

  1. linux svn命令
  2. python安装numpy-python安装numpy和pandas的方法步骤
  3. 定时器 Quartz
  4. mysql数据库备份出错_mysql数据库备份成功,再还原却失败,什么原
  5. JAVA之获取JavaSwing复选框JCheckBox选中的值(内容)
  6. 条件编译用法(#ifndef #define #endif#else)
  7. SQL Server 中使用 Try Catch 处理异常
  8. windows下使用Nginx服务器实现负载均衡方法
  9. java报错:java:xxx包不存在
  10. 最佳HTML5应用开发工具有哪些?
  11. VC++ 用setsockopt()来控制recv()与send()的超时
  12. 拯救安卓手机的数据(无法进入系统只能打开recovery)
  13. 解决手机端页面的鼠标点击出现蓝色背景
  14. EVOLAB | 再度解析共识机制:POW
  15. 男人到中年,活得不如一条狗
  16. wma格式怎么转换mp3,4种方法超快学
  17. 根据前序遍历和中序遍历创建二叉树
  18. 谈谈北京的租房和买房
  19. 基于python马蜂窝网的旅游景点推荐系统
  20. FastAdmin自定义搜索,通用搜索失效

热门文章

  1. 如何确定图片名未改变 php,这里未改变的是数据库中默认的数据,比如修改时间?,还有发布用户名?...
  2. Type Data(数据类型)
  3. Dart 1(环境安装)
  4. 7-34 红色警报 (10 分)(结构体并查集)
  5. 力扣150-逆波兰表达式求值(C++,附思路)
  6. 基于python的图像分割并计数
  7. adf盖怎么打开_原来啤酒瓶盖上有个小机关,用手就能拧开,比开瓶器还快
  8. c 判断文件是否存在_C++基础:判断文件是否存在的方法
  9. 规划收发你的邮件,使用qq邮箱接收阿里云企业邮邮件
  10. 探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure