转自:C#与Java的比较

2015-06-26

目录

一、C#、C++和Java
二、语言规范的比较
  2.1、简单数据类型
  2.2、常量
  2.3、公用类的入口点
  2.4、switch语句
  2.5、foreach语句
  2.6、C#没有>>>移位操作符
  2.7、goto关键词
  2.8、声明数组
  2.9、包
  2.10、默认包
  2.11、面向对象
  2.12、可访问性
  2.13、派生类
  2.14、最终类
  2.15、接口
  2.16、is和as操作符
  2.17、库
  2.18、垃圾收集
  2.19、异常处理
三、Java没有的功能
  3.1、枚举器
  3.2、结构
  3.3、属性
  3.4、以引用方式传递简单数据类型的参数
  3.5、C#保留了指针
  3.6、代理
  3.7、包装和解除包装

C#(C-Sharp)是Microsoft的新编程语言,被誉为“C/C++家族中第一种面向组件的语言”。然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品。事实是否是这样的呢?

本文的比较结果表明,C#不止是Java的同胞那么简单。如果你是一个Java开发者,想要学习C#或者了解更多有关C#的知识,那么本文就是你必须把最初10分钟投入于其中的所在。

一、C#、C++和Java


 返回

C#的语言规范由Microsoft的Anders Hejlsberg与Scott Wiltamuth编写。在当前Microsoft天花乱坠的宣传中,对C#和C++、Java作一番比较总是很有趣的。考虑到当前IT媒体的舆论倾向,如果你早就知道C#更接近Java而不是C++,事情也不值得大惊小怪。

对于刚刚加入这场讨论的读者,下面的表1让你自己作出判断。显然,结论应该是:Java和C#虽然不是孪生子,但C#最主要的特色却更接近Java而不是C++。

表1:比较C#、C++和Java最重要的功能

功能

C#

C++

Java

继承

允许继承单个类,允许实现多个接口

允许从多个类

继承

允许继承单个类,允许实现多个接口

接口实现

通过“interface”关键词

通过抽象类

通过“interface”关键词

内存管理

由运行时环境管理,使用垃圾收集器

需要手工管理

由运行时环境管理,使用垃圾收集器

指针

支持,但只在很少使用的非安全模式下才支持。通常以引用取代指针

支持,一种很常用的功能。

完全不支持。代之以引用。

源代码编译后的形式

.NET中间语言(IL)

可执行代码

字节码

单一的公共基类

异常处理

异常处理

返回错误

异常处理。

二、语言规范的比较


 返回

2.1、简单数据类型

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

表2列出了所有C#的预定义数据类型:

表2:C#中的值类型

类型

说明

object

所有类型的最终极的基类

string

字符串类型;字符串是一个Unicode字符的序列

sbyte

8位带符号整数

short

16位带符号整数

int

32位带符号整数

long

64位带符号整数

byte

8位无符号整数

ushort

16位无符号整数

uint

32位无符号整数

ulong

64位无符号整数

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: 

 1 using System;
 2 
 3 public class Hello {
 4 
 5 public static int Main() {
 6 
 7 Console.WriteLine("Done");
 8 
 9 return 1;
10 
11 }
12 
13 }
View Code

相关文章:

  • 2022-12-23
  • 2021-07-20
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
  • 2021-11-08
  • 2021-05-25
  • 2021-09-25
猜你喜欢
  • 2021-06-24
  • 2021-11-30
  • 2022-12-23
  • 2021-06-07
  • 2021-09-16
  • 2022-12-23
相关资源
相似解决方案