现在的位置: 首页 > 综合 > 正文

C#中的checked与implicit,explicit

2017年10月02日 ⁄ 综合 ⁄ 共 1006字 ⁄ 字号 评论关闭
默认情况下,如果表达式仅包含常数值,且产生的值在目标类型范围之外,则它会导致编译器错误。
如果表达式包含一个或多个非常数值,则编译器不检测溢出。

在下面的示例中,计算赋给
i2
的表达式不会导致编译器错误。

int i2 = 2147483647 + ten;

checked

{   

    
int
i3 = 2147483647 + ten;   

     Console.WriteLine(i3);

}

可以使用 unchecked
关键字阻止溢出检查。

 

explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。
转换运算符可以是 explicit,也可以是
implicit
隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。
下面是一个综合的例子:
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 string GetCurrencyUnit()
{
return "Dollar";
}
public static explicit operator Currency (float value)//???
{
checked
{
uint dollars =(uint)value;
ushort cents =(ushort)((value-dollars)*100);
return new Currency(dollars,cents);
}
}
public static implicit operator float (Currency value)
{
return value.Dollars + (value.Cents/100.0f);
}
public static implicit operator Currency (uint value)
{
return new Currency(value, 0);
}
public static implicit operator uint (Currency value)
{
return value.Dollars;
}
}


 

抱歉!评论已关闭.