登录 / 注册
IT168技术开发频道
IT168首页 > 技术开发 > 技术开发评论 > 正文

惊人发现!C#亲Java远离C++

2010-08-17 11:05    VS小米渣的博客 来源:VS小米渣的博客  作者: VS小米渣 编辑: 胡铭娅

        【IT168 评论】C#的语言规范由Microsoft的Anders Hejlsberg与Scott Wiltamuth编写。在当前Microsoft天花乱坠的宣传中,对C#和C++、Java作一番比较总是很有趣的。考虑到当前IT媒体的舆论倾向,如果你早就知道C#更接近Java而不是C++,事情也不值得大惊小怪。显然,结论应该是:Java和C#虽然不是孪生子,但C#最主要的特色却更接近Java而不是C++。

        一、C#、C++和Java

表1:比较C#、C++和Java最重要的功能
功能C#C++Java
继承允许继承单个类,允许实现多个接口允许从多个类继承允许继承单个类,允许实现多个接口
接口实现通过“interface”关键词通过抽象类通过“interface”关键词
内存管理由运行时环境管理,使用垃圾收集器需要手工管理由运行时环境管理,使用垃圾收集器
指针支持,但只在很少使用的非安全模式下才支持。通常以引用取代指针支持,一种很常用的功能。完全不支持。代之以引用。
源代码编译后的形式.NET中间语言(IL)可执行代码字节码
单一的公共基类
异常处理异常处理返回错误异常处理。

  下面将说说C#和Java的一些重要区别。

  二、语言规范的比较

  2.1、简单数据类型

  简单数据类型(Primitive)在C#中称为值类型,C#预定义的简单数据类型比Java多。例如,C#有unit,即无符号整数。表2列出了所有C#的预定义数据类型:

表2:C#中的值类型
类型说明
object所有类型的最终极的基类
string字符串类型;字符串是一个Unicode字符的序列
sbyte8位带符号整数
short16位带符号整数
int32位带符号整数
long64位带符号整数
byte8位无符号整数
ushort16位无符号整数
uint32位无符号整数
ulong64位无符号整数
float单精度浮点数类型
double双精度浮点数类型
bool布尔类型;bool值或者是true,或者是false
char字符类型;一个char值即是一个Unicode字符
decimal有28位有效数字的高精度小数类型

  2.2、常量

  忘掉Java中的static final修饰符。在C#中,常量可以用const关键词声明。

public const int x = 55;

 

  此外,C#的设计者还增加了readonly关键词。如果编译器编译时未能确定常量值,你可以使用readonly关键词。readonly域只能通过初始化器或类的构造函数设置。

  2.3、公用类的入口点

  在Java中,公用类的入口点是一个名为main的公用静态方法。main方法的参数是String对象数组,它没有返回值。在C#中,main方法变成了公用静态方法Main(大写的M),Main方法的参数也是一个String对象数组,而且也没有返回值,如下面的原型声明所示:

public static void Main(String[] args)

 

  但是,C#的Main方法不局限于此。如果不向Main方法传递任何参数,你可以使用上述Main方法的一个重载版本,即不带参数列表的版本。也就是说,下面的Main方法也是一个合法的入口点:

public static void Main()

 

  另外,如果你认为有必要的话,Main方法还可以返回一个int。例如,下面代码中的Main方法返回1:

using System;
public class Hello {
public static int Main() {
Console.WriteLine(
"Done");
return
1;
}
}

 

  与此相对,在Java中重载main方法是不合法的。

  2.4、switch语句

  在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。请考虑下面用switch语句处理字符串变量的C#代码:

using System;
public class Hello {
public static void Main(String[] args) {
switch (args[
0]) {
case "老板":
Console.WriteLine(
"早上好!我们随时准备为您效劳!");
break;
case "雇员":
Console.WriteLine(
"早上好!你可以开始工作了!");
break;
default:
Console.WriteLine(
"早上好!祝你好运!");
break;
}
}
}

 

  与Java中的switch不同,C#的switch语句要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。 

关键字: C++ , C# , java
  • IT168企业级IT168企业级
  • IT168文库IT168文库

扫一扫关注

行车视线文章推荐

首页 评论 返回顶部