1、属性:Java中定义和访问属性均要用get和set方法,C#则以特殊形式:
public int TaskId
{
get { return _taskId; }
set { _taskId = value; }
}
3、java只有继承,没有扩展。
4、由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词。
5、C#中的base == java中的super。
6、java中没有结构,C#的结构(Struct)与类很相似,而结构是一种值类型,它存储在栈中或者是嵌入式的,结构可以实现接口,可以象类一样拥有成员,结构不支持继承。
7、C#中有析构器(destructor,~structor),java中没有,但java有finalize函数,finalize函数极不推荐使用。
8、java中没有using关键字,C#中有,它允许为名称空间或者名称空间中的类指定别名:using TheConsole = System.Console,
using也可以用于释放资源,当using代码块执行结束后会调用disposal方法。
9、传值方式:
在Java中简单数据类型的值传参时,都以传值方式。
在c#中如果加ref则会以引用的方式传值(方法内部改变该参数,则外部变量一起跟着变),加out与ref基本相同,但out不要求参数一定要初始化.
10、C#的属性声明方式与java不同,java遵循POJO提供getXxx、setXxx,C#需要使用特殊写法:public String Name{ get;set;}
11、C#中有索引器,而java中没有。
12、C#中可以使用委托delegate,可以使用lambda表达式获得一个方法(C#可以此实现代理模式,观察者模式,自动事务处理等)。java中没有delegate,但是有反射和代理,可以实现delegate。
13、C#使用yield实现迭代器,java中没有yield关键字。
14、java中没有LinQ这样查询功能,为集合进行排序查找等操作。
15、C#中可以重载操作符,java中不可以。
16、C#中,不用任何范围修饰符时,默认的是protect,因而不能在类外被访问。java是package级别可以访问
17、因为Java规定,在一个文件中只能有一个public类,而且这个类的名称必须与文件名一模一样,这是一个区别
18、C#预定义的简单数据类型比Java多。例如,C#有unit,即无符号整数。
19、对于常量,C#没有Java中的static final修饰符。在C#中,常量可以用const关键词声明C#的设计者还增加了readonly关键词,readonly域只能通过初始化器或类的构造函数设置
20、在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。
21、goto关键词:
Java不用goto关键词。在C#中,goto允许你转到指定的标签。不过,C#以特别谨慎的态度对待goto,比如它不允许goto转入到语句块的内部。在Java中,你可以用带标签的语句加上break或continue取代C#中的goto。
22、int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 };
但在C#中,只有第一行代码合法,[]不能放到变量名字之后。
23、在Java中,命名空间即是包,包的名字同时也是实际存在的实体,它决定了放置.Java文件的目录结构。在C#中,物理的包和逻辑的名称之间是完全分离的。
.NET中包的实体称为程序集(Assembly)。每一个程序集包含一个manifest结构。manifest列举程序集所包含的文件,控制哪些类型和资源被显露到程序集之外,并把对这些类型和资源的引用映射到包含这些类型与资源的文件。程序集是自包含的,一个程序集可以放置到单一的文件之内,也可以分割成多个文件。.NET的这种封装机制解决了DLL文件所面临的问题,即臭名昭著的DLL Hell问题。
24、在Java中,Java.lang包是默认的包,C#中不存在默认的包。
25、C#中的访问修饰符与Java中的基本对应,但多出了一个internal。简而言之,C#有5种类型的可访问性,如下所示:
public:成员可以从任何代码访问。
protected:成员只能从派生类访问。
internal:成员只能从同一程序集的内部访问。
protected internal:成员只能从同一程序集内的派生类访问。
private:成员只能在当前类的内部访问。
26、在Java中,接口方法声明可以带有public修饰符,但在C#中,显式为接口的方法指定public修饰符是非法的。
37、C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。
在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有“进取心”:如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。
38、C#仍旧保留了C++的内存手工管理方法,它适合在速度极端重要的场合使用,而在Java中这是不允许的。
39、在C#中,所有的异常都从一个名为Exception的类派生,java分为两种:RuntimeException、Exception,这两个都继承于ThrowAble。
40、c#保留了指针。unsafe
41、C#线程同步使用 lock 关键字,java中使用synchronized
42、C#启动线程
Thread t = new Thread(new ThreadStart(FunctionName));
或者Thread t = new Thread(FunctionName); 这就是最基本的创建线程方法。但是ThreadStart是无参数的委托类型,
java中启动线程 new Thread(new Runable()).start();
参考: