类型转换
1.explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Celsius 的类:
// Must be defined inside a class called Farenheit:
public static explicit operator Celsius(Farenheit f)
{
return new Celsius((5.0f/9.0f)*(f.degrees-32));
}
可以如下所示调用此转换运算符:
Farenheit f = new Farenheit(100.0f);
Celsius c = (Celsius)f;
2.implicit 关键字用于声明隐式的用户定义类型转换运算符。例如:
//
public static implicit operator Currency (uint value)
{
return new Currency(value, 0);
}
可以如下调用此转换预算符:
Uint u = new Uint ( 5 ) ;
Currency c = ( Currency ) u ;
检查溢出
checked 关键字用于对整型算术运算和转换显式启用溢出检查。
默认情况下,如果表达式产生的值超出了目标类型的范围,则常数表达式将导致编译时错误,而非常数表达式在运行时计算并将引发异常。不过,如果通过编译器选项或环境配置在全局范围内取消了溢出检查,则可以使用 checked 关键字来启用此项功能。
public static explicit operator Currency (float value)
{
checked
{
uint dollars =(uint)value;
ushort cents =(ushort)((value-dollars)*100);
return new Currency(dollars,cents);
}
}
Uncheck 关键字用于取消整型算术和转换的溢出检查,在未检查的上下文中,如果表达式产生目标类型范围之内的值,则结果被截断。
class TestClass
{
const int x = 2147483647; // Max int
const int y = 2;
static void Main()
{
int z;
unchecked
{
z = x * y;
}
Console.WriteLine("Unchecked output value: {0}", z);
}
}
输出
Unchecked output value: -2