纸墙 2016-12-29 02:48 采纳率: 100%
浏览 1527
已采纳

C# 重写ToString()与调用问题

namespace CurrencyTest
{
struct Currency
{
public uint Dollars;
public ushort Cents;
public Currency(uint dollars, ushort cents)
{
this.Dollars = dollars;
this.Cents = cents;
}
public override string ToString()
{
return string.Format("${0}.{1,-2:00}", Dollars, Cents);
}
public static implicit operator float(Currency value)
{
return value.Dollars + (value.Cents / 100.0f);
}
public static explicit operator Currency(float value)
{
checked
{
uint dollars = (uint)value;
ushort cents = Convert.ToUInt16((value - dollars) * 100);
return new Currency(dollars, cents);
}
}
}
class Program
{
static void Main(string[] args)
{
try
{
//Console.WriteLine(2500000.ToString("N"));
Currency balance = new Currency(50, 35);
Console.WriteLine(balance);
Console.WriteLine(balance.ToString());
Console.WriteLine("balance is" + balance);
Console.WriteLine("balance is(using ToString())"+
balance.ToString());
float balance2 = balance;
Console.WriteLine("After converting to float,=" + balance2);
balance = (Currency)balance2;
Console.WriteLine("After convering to Currency,=" + balance);

            Console.WriteLine("Now attempt to convert out of range value of" +
                "-$100.00 to a Currency");
            checked
            {
                balance = (Currency)(-50.5);
                Console.WriteLine("Result is " + balance.ToString());
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception occurred:" + e.Message);
        }
    }
}

}

不是很理解Console.WriteLine(balance); 输出是50.35
Console.WriteLine("balance is" + balance); balance是$50.35
balance.ToString() 是$50.35我都是理解的
求好心人给我讲一下 有点晕

  • 写回答

1条回答 默认 最新

  • Tiger_Zhao 2016-12-29 03:31
    关注

    因为有 implicit operator float,所以 WriteLine(balance) 匹配的是 WriteLine(float value) (你可以在WriteLine上“右键\转到定义”进行确认)。
    按 float 而不是 object 输出,不会调用 ToString()
    你把 implicit operator float 去掉,就会输出 $50.35 了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办