自定义ToString(),实现IFormattable.ToString()及IFormatProvider接口

以下示例来源于C#高效编程。书上代码有点问题,自己整理了一下。

 

实现IFormattable.ToString(),并且允许客户程序提供自己的格式化选项(通过IFormatProvider实现)。

public class Customer : IFormattable

{
    public Customer()
    {
     //
     // TODO: Add constructor logic here
     //
       
    }
    public string name
    {
        get;
        set;
    }

    public decimal Revenue
    {
        get;
        set;
    }

    public string ContractPhone
    {
        get;
        set;
    }

    public override string ToString()
    {
        return name;
    }

    public string ToString
        (string format,IFormatProvider formatProvider)
    {
        if (formatProvider != null)
        {
            ICustomFormatter fmt = formatProvider.GetFormat(typeof(ICustomFormatter)) as ICustomFormatter;
            if (fmt != null)
                return fmt.Format(format, this, formatProvider);
        }

        switch (format)
        {
            case "r":
                return Revenue.ToString();
            case "p":
                return ContractPhone;
            case "nr":
                return string.Format("{0,20},{1,10:C}",name,Revenue);
            default :
                return name;
        }
    }
}

 

//实现IFormatProvider,ICustomFormatter接口
public class  CustomFormatter : IFormatProvider
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
        {
            return new CustomFormatProvider();
        }
        return null;
    }
 
    //nested class
    private class CustomFormatProvider : ICustomFormatter
    {
        public string Format(string format,object arg,IFormatProvider formatProvider)
        {
            Customer c = arg as Customer;
            if (c == null)
            {
                return arg.ToString();
            }
            return string.Format("{0,50},{1,50},{2,50:C}",c.name,c.ContractPhone,c.Revenue);
        }
    }

 

//下面是使用的代码:

        Customer c = new Customer();
        c.name = "amyamyamyamyamyamyamyamyamyamyamyamyamyamyamy123456789";
        c.Revenue = 987654321123456789;
        c.ContractPhone = "sss";
        CustomFormatter c_toStringFormat = new CustomFormatter();
        Response.Write(c.ToString("nr", null));
        Response.Write(c.ToString("", c_toStringFormat));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值