Visual Studio:针对 Java 开发人员的 C# 编程语…

2008-02-23 10:15:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


图 2:引用类型的内存位置

返回页首

装箱 (Boxing) 和拆箱 (Unboxing)

这种将值类型转换为引用类型的过程称为装箱。而相反的将引用类型转换为值类型的过程就称为拆箱。如下面的代码所示:

int valueVariable = 10;



// boxing

object obj = refVariable;



// unboxing

int valueVariable = (int) refVariable;

Java 需要我们手动执行这样的转换。通过构造这样的对象,可以将基本数据类型转换成包装类的对象(装箱)。同样,通过调用这种对象中的适当方法,也可以从包装类的对象中提取基本数据类型的值(拆箱)。有关装箱的更多信息,请参见 装箱转换;有关拆箱的更多信息,请参见 拆箱转换。

返回页首

运算符

C# 提供了 Java 支持的所有可用运算符,如下表所示。在表的末尾,您将看到一些新的运算符,它们可以在 C# 中使用而不可以在 Java 中使用:

运算符 类别 符号

[Text]

[Text]

一元

-- - ! ~ ()

乘法

* / %

加法

-

移位

<< >>

关系

< > <= >= instanceof

相等

== !=

逻辑与

&

逻辑异或

^

逻辑或

|

条件与

&&

条件或

||

条件

? :

赋值

= *= /= %= = -= <<= >>= &= ^= |=

操作数的类型

typeof

操作数的大小

sizeof

执行溢出检查

checked

取消溢出检查

unchecked

唯一不可以在 C# 中使用的 Java 运算符是 >>> 移位运算符。之所以在 Java 中存在此运算符,是因为该语言中缺乏无符号变量,例如在需要右移位以在最高有效比特位插入 1 时。

然而,C# 支持无符号变量,因而 C# 只需要标准 >> 运算符。取决于操作数是否带有符号,此运算符产生不同的结果。右移一个无符号数会在最高有效比特位插入 0,而右移一个有符号数则会复制前面的最高有效比特位。

checked 和 unchecked 运算符

如果对于分配给正在使用的数据类型的比特数来说结果太大,则算术运算会产生溢出。对于特定的整数算术运算,通过使用 checked 和 unchecked 关键字,可以检查或忽略这样的溢出。如果表达式是一个使用 checked 的常量表达式,则会在编译时产生错误。

下面这个简单的示例说明了这两个运算符的用法

using System;

public class Class1

{

  public static void Main(string[] args)

  {

    short a = 10000, b = 10000;

    short d = unchecked((short)(10000*10000));

    Console.WriteLine(d=   d);



    short c = (short)(a*b);

    Console.WriteLine(c=   c);



    short e = checked((short)(a*b));

    Console.WriteLine(e=   e);

  }

}

在这段代码中,unchecked 运算符避免了发生编译时错误,否则,下面的语句会产生错误:

short d = unchecked((short)(10000*10000));

下一个表达式在默认情况下是不检查的,因此值会悄悄溢出:

short c = (short)(a*b);

我们可以使用 checked 运算符来强制检查该表达式是否会在运行时溢出:

short e = checked((short)(a*b));

当运行时,赋第一个值给 d & c 会以值 -7936 悄悄溢出,但是当试图使用 checked() 以获得 e 的乘积值时,程序会引发 System.OverflowException 异常。

注意:另外,通过使用命令行编译器开关 (/checked) 或者直接在Visual Studio 中基于每个项目使用此开关,您还可以控制是否检查代码块中的算术溢出。

is 运算符

此运算符确定左边对象的类型是否与右边指定的类型相匹配:

if (objReference is SomeClass) ...

在下面的示例中,CheckType() 方法打印一条消息,描述传递给它的参数的类型:

using System;



public class ShowTypes

{



  public static void Main(string[] args)

  {

    CheckType (5);

    CheckType (10f);

    CheckType ("Hello");

  }



  private static void CheckType (object obj)

  {

    if (obj is int)

      {

        Console.WriteLine("Integer parameter");

      }

      else if (obj is float)

      {

        Console.WriteLine("Float parameter");

      }

      else if (obj is string)

      {

        Console.WriteLine("String parameter");

      }

    }

}


			   
			   

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Struts Controller

下一篇:web.xml和struts-config.xml的配置