.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
使用IFormattable接口为自定义类定义格式字符串

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 /// <summary>
 /// “点”类的定义。
 /// </summary>
 public class Point : System.IFormattable
 {
  /// <summary>
  /// 点类的横纵坐标。
  /// </summary>
  private int m_x,m_y;

  /// <summary>
  /// 点类构造(参数为横纵坐标值)。
  /// </summary>
  /// <param name="x"></param>
  /// <param name="y"></param>
  public Point(int x,int y)
  {
   m_x = x;
   m_y = y;
  }

  #region IFormattable 成员

  /// <summary>
  /// 用于生成格式字符串的函数。
  /// </summary>
  /// <param name="format">格式字符串。</param>
  /// <param name="formatProvider">区域格式信息对象。</param>
  /// <returns></returns>
  public string ToString(string format, IFormatProvider formatProvider)
  {
   string retString;
   try
   {
    //判断格式字符串。
    switch(format.ToUpper())
    {
     case "G":  //自定义的通用格式。
      retString = string.Format(formatProvider,"({0},{1})",m_x,m_y);
      //“点”对象的字符串格式为:“(十进制数字,十进制数字)”。
      break;
     case "S":  //自定义的标准格式。
      retString = string.Format(formatProvider,"<{0},{1}>",m_x,m_y);
      //“点”对象的字符串格式为:“<十进制数字,十进制数字>”。
      break;
     default:  //自定义的默认格式。
      retString = string.Format(formatProvider,"({0:X},{1:X})",m_x,m_y);
      //“点”对象的字符串格式为:“(十六进制数字,十六进制数字)”。
      break;

    }
   }
   catch(System.NullReferenceException)
   {
    //格式字符串为空,返回通用格式。
    retString = string.Format(formatProvider,"({0},{1})",m_x,m_y);
   }
   return retString;
  }

  #endregion

 }

 /// <summary>
 /// Test 的摘要说明。
 /// </summary>
 public class Test
 {
  public static void Main()
  {
   //定义一个点。
   Point p = new Point(13,10);
   //打印默认格式的点。
   Console.WriteLine("{0}",p);
   //打印标准格式的点。
   Console.WriteLine("{0:S}",p);

   /*
    * 输出结果:(13,10)
    *     <13,10>
    */
  }
 }

 /*
  * 注意:如果不实现IFormattable接口也可以用string.Format这些方法打印自定义类的对象,但string.Format方法
  *    只是调用object.ToString方法将类名打印出来。下面是string.Format这些方法调用ToString的处理顺序:
  *
  *   1.如果要格式化的对象的值是 null,则返回空字符串 ("")。
  *   2.如果要格式化的对象所属的类实现了 ICustomFormatter 接口,则调用 ICustomFormatter.Format 方法。
  *   3.如果前面的ICustomFormatter.Format 方法未调用,并且该类实现了 IFormattable 接口,则调用
  *      IFormattable.ToString 方法。
  *   4.如果前面的步骤未格式化类型,则调用该类型的 ToString 方法(从 Object 类继承而来)。
  *
  * 然而,只有实现了IFormattable或ICustomFormatter这些接口才能识别我们自己定义的格式字符串,打印出我
  * 们想要的结果。
  */




相关文章

相关软件