System.Decimal是非常特殊的类型。在CLR中,Decimal类型不是基元类型。这就意味着CLR没有知道如何处理Decimal的IL指令。
在文档中查看Decimal类型,可以看到它提供了一系列的public static方法,包括Add、Subtract、Multiply、Divide等。此外Decimal类型还为加减乘除提供了操作符重载方法。
编译使用了Decimal值的程序时,编译器会生成代码来调用Decimal的成员,并通过这些成员来执行实际的运算。
这意味着,Decimal值的处理速度慢于CLR基元类型的值。另外,由于没有相应的IL指令来处理Decimal值,所以checked、unchecked操作符、语句以及编译器开关都失去了作用。
如果对Decimal值执行的运算是不安全的,肯定会抛出OverflowException异常。