C#和java的对比及总结
Posted silentdoer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#和java的对比及总结相关的知识,希望对你有一定的参考价值。
1.Java里的AClass.class得到的Class<T>类的对象对应C#的typeof(AClass)得到的Type类型的对象;(但是C#如果要反射创建对象是用Type对象的Assembly对象)
2.之前一直纠结于c#的委托类型变量是小驼峰,如Func1 func = Console.WriteLine;然后func("uu");的调用是不一致的,但是现在可以这样子func.Invoke("uu");这样就一致了(注意如果是void它是会返回null的)
3.c#里void也是有类似java的void.class的,是typeof(void),C#用反射GetMethod("test")时也可以通过ReturnType判断其是否是等于typeof(void)
4.C#Delegate和delegate的区别就像是Java的Enum类和enum关键字的区别,所有enum关键字创建的枚举类都是继承Enum类,这点delegate也是一样的;
注意C#里Delegate和delegate是不一样的概念,但是String和string则可以认为是完全一样的(C++里的别名一样或C语音里的宏);
它们的主要区别是delegate关键字是用来声明类型,而string关键字是用来声明变量/引用;
5.Java的a instanceof A(or Base)对应C#的是a is A;
6.typeof(Delegate).IsAssignableFrom(typeof(Func1))在Java的反射里也是有相关的Api的;
7.Java里AClass.class是synchronized static method()锁的对象,AClass这个名字和C#一样是没有意义的,然后C#里比较对应AClass.class的是typeof(AClass)或aClass.GetType();
8.C#的Type比Java的Class要高明,因为Class实际上是Class<T>,然后比如Class<AClass> clazz = AClass.class;但是注意Class变量按理说本来就是用来代表一个类的元数据,那就不应该还有什么泛型的说法;所以C#的Type没有泛型是合理的;
以上是关于C#和java的对比及总结的主要内容,如果未能解决你的问题,请参考以下文章