Java和C#语法对比(转)
| Java | 
 C#  | 
||
| 访问修饰符 | public | 
 修饰类、接口、变量、方法。 对所有类可见。  | 
 修饰类、接口、变量、方法。 对所有类可见。  | 
| internal | 无。 | 
 修饰类、接口、变量、方法。 类,接口的缺省访问修饰符。 同一个程序集的对象可见。  | 
|
| protected | 子类可见。 | 子类可见。 | |
| private | 类内部可见。 | 
 变量,方法的缺省访问修饰符 类内部可见。  | 
|
| default | 
 类、接口、变量、方法的缺省修饰符。 同一包内可见。  | 
无。 | |
| 基本类型 | 
 基本类型,无方法可调用。 作为局部变量时,储存与栈。作为字段时,跟随于实例。  | 
 值类型,继承object,具有ToString()等方法。 作为局部变量时,储存与栈。作为字段时,跟随于实例。  | 
|
| 布尔值 | boolean | bool | |
| 整形 | short,int,long | short,int,long | |
| 浮点数 | float,double | float,double | |
| 可空基本类型 | 例如:Integer是引用类型,Integer是int的包装类。 | 例如: int?其实是Nullable<int>的语法糖,而Nullable<int>依然是值类型。 | |
| 布尔值 | Boolean | bool? | |
| 整形 | Short,Integer,Long | short?,int?,long? | |
| 浮点数 | Float,Double | float?,double? | |
| 高精度数值类型 | BigDecimal | decimal? | |
| 源文件组织 | 导入 | 使用包的概念,关键字import导入 | 使用命名空间的概念,关键字using导入 | 
| 类文件 | 
 源文件名要和Public类名保持一致, 最多存在一个Public修饰的类, 文件名后缀是.java  | 
 没有java中的限制, 文件名后缀是.cs  | 
|
| 枚举 | 枚举 | 
 关键字enum, 引用类型, 和class差不多,可以有字段和方法, 可以添加私有构造函数  | 
 关键字enum, 值类型, 默认继承int,可以继承其他值类型  | 
| 常量 | 常量 | 关键字final修饰变量,字段,定义时赋值 | 
 关键字const修饰变量,字段,定义时赋值 关键字readonly修饰,可以在构造函数中赋值  | 
| 密封 | 密封 | 关键字final修饰方法,类,表示不可继承,不可重写 | 关键字sealed修饰方法,类,表示不可继承,不可重写 | 
| 属性 | 属性 | 
 只有字段概念, 一般情况下是要定义字段XX,方法getXX()和setXX()  | 
 C#引入属性概念,简化了操作, 只需要定义XX{get;set;}  | 
| 判断类型 | 判断类型 | Instanceof | is | 
| 锁 | 锁 | Synchronized | Lock | 
| 接口 | 接口 | 
 关键字 implements, 使用注解@Override  | 
 和继承类一样,使用符号: 实现类中的方法,不需要使用override关键字, 一般命名需要用大写字母I开头  | 
| 类 | 抽象类 | 
 abstract 使用注解@Override  | 
 abstract, 重写方法需要使用override关键字  | 
| 分部类 | 
 无  | 
 partial 可以将分布在不同文件,而在相同命名空间下,相同名称并用partial标识的类合并,多用于wpf,winform框架上。  | 
|
| 匿名类 | 
 如Runnable hello = new Runnable() { public void run() { System.out.println("hello"); } }; 简化了定义子类的步骤。  | 
 无。类似的场景基本都是用委托的  | 
|
| 内部类 | 
 在new的使用上,内部类要和外部类关联起来  | 
 在new的使用上,内部类和外部类用法无区别  | 
|
| 匿名方法 | 匿名方法 | 
 无。  | 
 使用delegate声明匿名方法, 如 delegate(int x) { Console.WriteLine("Anonymous Method: {0}", x); };  | 
| 虚拟方法 | 虚拟方法 | 
 默认都是虚拟方法  | 
 virtual标识虚拟方法,子类用override重写  | 
| 静态 | 静态类 | 使用关键字static | 
 使用关键字static, 可以有静态构造函数,  | 
| 传参 | 引用传递 | 无 | 
 在方法参数加上ref,out,使参数按引用传递 即方法内改变参数的值,也会影响到方法外的值  | 
| 不定长参数 | 
如int...  | 
如params int[]  | 
|
| 流程控制 | 循环 | 
 关键字for有两种用法 for(初始化; 布尔表达式; 更新) { //代码语句 } for(声明语句 : 表达式) { //代码句子 }  | 
 分别为for和foreach
 for(初始化; 布尔表达式; 更新) { //代码语句 } foreach (声明语句  in 表达式)  | 
| 字符 | 字符 | 
 String,引用类型, 需要使用方法equals比较是否相等  | 
 string,引用类型, 但用法和值类型类似,可以直接用==比较是否相等, 实现原理就是微软重载了string的==运算符  | 
| 委托 | 委托 | 无。 | 
 使用关键字Delegate声明,是存有对某个方法的引用的一种引用类型。 使用+使用委托的多播。  | 
| 泛型 | 泛型 | 
 <T>声明泛型, T只能是引用类型, 可以用extends和super限制T的类型, <?> 表示通配, 实际上是假泛型。  | 
 <T>声明泛型, T可以是引用类型也可以是值类型 使用:表示泛型约束,如T:new()表示T必须要有无参构造函数, 真正的泛型。  | 
| 注解与特性 | 注解与特性 | 
 使用@声明注解,如 @Service  | 
 C#引入attribute作为特性,如 [Export(typeof(IPayModule))] { ...... }  | 
| 索引器 | 索引器 | 无。 | 定义了索引器,就可以使用[]取值。 | 
| 运算符重载 | 运算符重载 | 无。 | 可以对+,-,==等内置的运行符重载,string的==比较符就是运算符重载的结果。 | 
| 集合 | 列表 | List是接口,ArrayList才是实现类 | IList是接口,List是实现类 | 
| 字典 | Map | Dictionary | |
| 集合处理 | 
 流式api, 对象.stream().filter(x->x.getCount()>0).collect(Collectors.toList())  | 
 Linq 对象.Where(x=>x.Count>0).ToList() 使用上方便很多  | 
|
| lambda | lambda | 
 ()->{}, 入参类型为函数式接口, 实质上lambda表达式会在编译阶段被转换为匿名内部类  | 
 ()=>{}, 入参类型为委托delegate  | 
| 方法引用 | 
 类::实例方法 
类::静态方法 
对象::实例方法 
 | 
 类.方法  | 
|
| 扩展方法 | 扩展方法 | 
 无。要实现类似功能,要编写Util类。 
 | 
扩展方法是定义在静态类的静态方法,入参中的this代表使用的对象,是单继承的一种补充。 | 
| 命名规范 | 命名规范 | 
 接口命名和类命名一样,如Module。 私有字段小写字母开头,如test。 方法命名是小写字母开头,如getSomeThing()  | 
 接口命名开头要加大写字母I,如IModule。 私有字段开头要加_,如_test。 方法命名都是单词首字母大写,如GetSomeThing()  | 
源地址:https://www.cnblogs.com/caizl/p/9338343.html
Java和C#语法对比(转)的更多相关文章
- Java, C#, Swift语法对比速查表
		
原文:Java, C#, Swift语法对比速查表 Java 8 C# 6 Swift 变量 类型 变量名; 类型 变量名; var 变量名 : 类型; 变量(类型推断) N/A var 变量名= ...
 - Go vs Java vs C# 语法对比
		
目录 1. 说明 2. 对比 2.1 关键字(keywords) 2.1.1 Go 2.1.2 Java 2.1.3 C# 2.1.4 小结 2.2 基本数据类型 2.2.1 Go 基本数据类型 2. ...
 - Java和C#语法对比
		
Java 有静态导入,既可以导入静态方法和字段. .NET没有 Java里package和文件夹对应关系是强制的,要改都改.而C#中namespace和文件夹可以不对应,C# 更喜欢在一个projec ...
 - 十分钟让你明白Objective-C的语法(和Java、C++的对比)
		
很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头 疼,Objective-C的代码在语法上和Java, C++有着很大的区别, ...
 - 十分钟让你明白Objective-C的语法(和Java、C++的对比)
		
很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有 ...
 - 在Web开发方面Java跟PHp八大对比
		
在Web开发方面Java跟PHp八大对比 <本文摘自百度经验,用来简单对比一下这两种语言> 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点.语法和c语言比 ...
 - OJ题目JAVA与C运行效率对比
		
[JAVA]深深跪了,OJ题目JAVA与C运行效率对比(附带清华北大OJ内存计算的对比) 看了园友的评论之后,我也好奇清橙OJ是怎么计算内存占用的.重新测试的情况附在原文后边. ----------- ...
 - 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang  python  php c++ java Nodejs Performance)
		
2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
 - Python3 与 C# 面向对象之~继承与多态  Python3 与 C# 面向对象之~封装  Python3 与 NetCore 基础语法对比(Function专栏)  [C#]C#时间日期操作  [C#]C#中字符串的操作  [ASP.NET]NTKO插件使用常见问题  我对C#的认知。
		
Python3 与 C# 面向对象之-继承与多态 文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...
 
随机推荐
- 性能调优必备:NIO的优化实现原理
			
前言 我们就从底层的网络 I/O 模型优化出发,再到内存拷贝优化和线程模型优化,深入分析下 Tomcat.Netty 等通信框架是如何通过优化 I/O 来提高系统性能的. 网络 I/O 模型优化 网络 ...
 - MongoDB学习笔记:快速入门
			
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
 - Mapper注解与MapperScan注解
			
1.Mapper注解 在接口类上添加@Mapper,在运行时动态代理生成实现类 @Mapper public interface UserDao { // User getUser(); } 如果想要 ...
 - TensorRT-优化-原理
			
TensorRT-优化-原理 一.优化方式 TentsorRT 优化方式: TensorRT优化方法主要有以下几种方式,最主要的是前面两种. 层间融合或张量融合(Layer & Tensor ...
 - 深度学习框架:GPU
			
深度学习框架:GPU Deep Learning Frameworks 深度学习框架通过高级编程接口为设计.训练和验证深度神经网络提供了构建块.广泛使用的深度学习框架如MXNet.PyTorch.Te ...
 - Covid经济型自主汽车
			
Covid经济型自主汽车 Autonomous Vehicles in Covid Economy Covid经济已经对汽车行业产生了负面影响,更多的变化正在进行中,同时也带来了大量的不确定性.我们可 ...
 - pytest基础简介及实践举例
			
一.pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰 ...
 - SpringCloud Alibaba实战(5:子模块基本业务开发)
			
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节里,我们搭建了一个微服务项目的整体架构,并进行了版本控制. 接下来我们进一步 ...
 - Bind DNS服务——基础知识
			
Linux基础--Bind DNS服务 Part0 DNS简介 域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库 ...
 - Redis 面试题 - 收藏版 (持续更新、吐血推荐)
			
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...