IFormattable,ICustomFormatter, IFormatProvider接口

本文介绍了在C#中如何使用IFormattable接口自定义对象的格式化输出,并展示了多个示例,包括点类的格式化输出、自定义类的货币格式化及使用ICustomFormatter进行格式化。
ExpandedBlockStart.gif代码
  class Point : IFormattable
    {
        
public int x, y;
        
public Point(int x, int y)
        {
            
this.x = x;
            
this.y = y;
        }
        
public override String ToString() { return ToString(nullnull); }
        
public String ToString(String format, IFormatProvider fp)
        {
            
if (format == nullreturn String.Format("({0}, {1})", x, y);
            
if (format == "x"return x.ToString();
            
if (format == "y"return y.ToString();
            
throw new FormatException(String.Format("Invalid format string: '{0}'.", format));
        }
    }
    
public sealed class App
    {
        
static void Main()
        {
            Point p 
= new Point(598);
            Console.WriteLine(
"This is my point: " + p.ToString());
            Console.WriteLine(
"The point's x value is {0:x}", p);
            Console.WriteLine(
"The point's y value is {0:y}", p);
            
try
            {
                Console.WriteLine(
"Invalid way to format a point: {0:x+y}", p);
            }
            
catch (FormatException e)
            {
                Console.WriteLine(
"The last line could not be displayed: {0}", e.Message);
            }
            Console.WriteLine(
"yrst {0:C}",11);
            Console.Read();
        }
    }

 

 

 

ExpandedBlockStart.gif代码
  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);
        }
    } 

    
class Program
    {
        
static void Main(string[] args)
        {
            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(); 
        }
    }

 

 

 

 

 

ExpandedBlockStart.gif代码
  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();
                }
            }
        }
    } 

    
class Program
    {
        
static void Main(string[] args)
        {
            
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(); 

        }
    }

 

 

转载于:https://www.cnblogs.com/renjuwht/archive/2010/01/02/1638081.html

AI-PPT 一键生成 PPT:用户输入主题关键词,AI-PPT 可快速生成完整 PPT,涵盖标题、正文、段落结构等,还支持对话式生成,用户可在 AI 交互窗口边查看边修改。 文档导入转 PPT:支持导入 Word、Excel、PDF 等多种格式文档,自动解析文档结构,将其转换为结构清晰、排版规范的 PPT,有保持原文和智能优化两种模式。 AI-PPT 对话 实时问答:用户上传 PPT 或 PPTX 文件后,可针对演示内容进行提问,AI 实时提供解答,帮助用户快速理解内容。 多角度内容分析:对 PPT 内容进行多角度分析,提供全面视野,帮助用户更好地把握内容结构和重点。 多语言对话支持:支持多语言对话,打破语言障碍,方便不同语言背景的用户使用。 AI - 绘图 文生图:用户输入文字描述,即可生成符合语义的不同风格图像,如油画、水彩、中国画等,支持中英文双语输入。 图生图:用户上传图片并输入描述,AI - 绘图能够根据参考图和描述生成新的风格化图像,适用于需要特定风格或元素的创作需求。 图像编辑:提供如 AI 超清、AI 扩图、AI 无痕消除等功能,用户可以上传图片进行细节修改和优化,提升图片质量。 AI - 文稿 文案生成:能够根据用户需求生成多种类型的文章,如市场营销文案、技术文档、内部沟通内容等,提升文案质量和创作效率。 文章润色:对已有文章进行改善和优化,包括语言表达、逻辑连贯性、内容流畅度等方面,使文章更符合用户期望和风格。 文章续写:AI 技术理解文本语境,为用户提供新的想法、补充资料或更深层次的见解,帮助用户丰富文档内容。 AI - 医生 智能健康咨询:包括症状自查,用户输入不适症状,AI 结合病史等信息提供疾病可能性分析与初步建议;用药指导,支持查询药品适应症、禁忌症等,并预警潜在冲突;中医辨证,提供体质辨识与调理建议。 医学报告解读:用户上传体检报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值