checked中的强制类型转换

新手上路,请多包涵

C#高级编程中
第七章预算符和强制类型转换中有这样的代码

checked
{
    Currency balance = (Currency)(-50.50);
}

其中,Currency是一个自定义的类,其中重写了强制类型转换

public static explicit operator Currency (float value)
{
    uint dollars = (uint)value;
    ushort cents = (ushort)((value - dollars) * 100);
    return new Currency(dollars, cents);
}

如果单独对该方法体内部的代码加上checked可以触发负数赋值给uint的异常,但是如果像上面通过类的强制类型转换来调用重写的方法的话则不会触发。书上说的是

溢出异常实际发生的位置根本不在Main()例程中——它是在强制转换运算符的代码中发生的,该代码在Main()方法中调用,而且没有标记为checked

这是什么意思呢?请指教

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进