C#学习笔记

类型转换

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值