设为首页
收藏本站
切换到窄版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
C语言
C++
NET
JAVA
PHP
易语言
数据库
IE盒子
»
论坛
›
IE盒子
›
JAVA
›
【技术浅谈】Java 工程师学习 C# 时的 7 个注意点 ...
返回列表
发帖
查看:
122
|
回复:
1
【技术浅谈】Java 工程师学习 C# 时的 7 个注意点
[复制链接]
零泣
零泣
当前离线
积分
18
3
主题
9
帖子
18
积分
新手上路
新手上路, 积分 18, 距离下一级还需 32 积分
新手上路, 积分 18, 距离下一级还需 32 积分
积分
18
发消息
发表于 2022-12-30 18:12:51
|
显示全部楼层
|
阅读模式
上期小编为大家介绍了从ArrayList开始,阅读Java源码。这里是上一期文章的链接:
本期,小编将浅谈一下Java 工程师学习 C# 时的 7 个注意点。
前言
从很多角度来说,C# 都是一门与 Java 十分相似的语言。C# 有着和 Java 一样从 C/C++ 系列派生而来的语法习惯,并推崇和 Java 类似的面向对象设计思路,甚至还有一些明显参考了 Java 的关键字和语法糖。然而,作为 Java 工程师,在可以以较低的学习成本学习 C# 的同时,是 C# 偶尔出现的与 Java 的微妙差异反而常令我们无所适从。很多有 Java 经验的开发者容易因为学习语法时“逃课”,在实际编写过程中遇到一些障碍甚至是犯下一些难以察觉的错误。本篇文章就旨在向大家介绍一些 Java 程序员在 C# 开发过程中容易遇到的问题或“陷阱”。本文面向 C# 初学者,所探讨内容主要集中在基本的语法与 API 层面,也不会涉及较复杂的开发模式。
1. 命名风格
微软官方所推荐的命名风格,与 Java 的区别主要在以下几处:
1.所有方法名都应以大写开头。
2.private 以外的成员变量(或属性)名都应以 大写字母 开头。
3.private 的成员变量(或属性)名应以 _ + 小写字母 开头。其中 static 的应以 s_ 开头。
4.即使是常量或枚举型的枚举值,也都应该命名为大写开头的“驼峰形”,而不是像 Java 一样全大写的“蛇形”。
注意,局部变量仍以小写字母开头,类名仍以大写字母开头,并且所有命名都遵循“驼峰式”命名法。这些习惯是和 Java 一样的。下面是一段典型的以 C# 命名风格书写的代码,相信很多 Java 程序员一开始都很难接受这种大写开头的方法和变量名吧:
当然,这只是微软官方推荐的标准命名风格,实际的开发团队或框架都可能使用不同的命名规则。比如,Unity 引擎开发中的成员变量命名就与 Java 相同,全都起成小写字母开头的驼峰式。
2. 基本类型
在基本类型方面,与 Java 相较主要有以下区别:
1.每个整数类型(不计 char)都有一个对应的 无符号类型,类型名为原类型名前加一个 u。比如 short 存储 -32768 到 32767 的整数,对应的 ushort 类型则可以存储 0 到 65535 的整数。
2.byte 类型较为特殊:byte 本身即是 无符号类型,范围为 0 到 255,而 Java 中的 byte 实际对应的是 sbyte 类型。
3.浮点数类型除了 float 和 double 外还有一个 decimal,精度比 double 更高,但范围更小。
4.布尔类型为 bool。
5.字符串和对象类型都是小写字母开头:string 和 object。 注意:它们仍然是引用类型(对象)!
3. 成员变量(Fields)与属性(Properties)
C# 加入了属性这一特性,用于方便的定义成员变量的访问方式。其基本概念类似与 Java 中的 Getter / Setter,但在书写定义和调用时语法更为简洁:
如果只需要最基本的 get 和 set 功能,下面这个语法糖可以跳过成员变量的定义:
还可以单独为 get 和 set 方法设置访问权限。
一般来说,成员变量大多用于 private 的变量,属性则多用于需要公开访问方法的变量。
4. 方法的重写
重写方法时不添加 @Override 注解,而是使用 override 修饰符 (说句题外话:C# 中也存在和注解类似的语法,即“特性 Attribute”)。并且,被重写的方法必须有 virtual 修饰符:
对于没有被 virtual 修饰的方法,可以使用 new 修饰符在子类中进行重载。然而,想实现多态只能依赖重写,因此本文将不会展开赘述。
5. Collections
就像 Java 中的 util 包里实现了大部分常用数据结构一样,C# 把大量数据结构的实装放在了 System.Collections 这个命名空间里。
注意:直接位于 Collections 命名空间下的接口或实装类 不 支持泛型, 支持泛型的类均位于 System.Collections.Generic 这个命名空间中,在导入时要注意不要写错了。
下表列出了一些常用的数据结构在 C# 中的对应名称:
对比 Java,我们要重点注意以下几点:
1.C# 中很多类型,如 Stack、Queue、SortedDictionary 等没有对应的抽象接口, 使用时既作为抽象数据类型又作为实际的数据结构。相对的,抽象接口都明确地以字母 I 开头。
2.LinkedList 类是没有实现 / 继承 IList、List 或 Queue 等数据结构的。
3.C# 中不存在包装类。基本类型的集合直接写原本的类型名称就可以了:
6. 自动类型推论
Java 有一个众所周知的语法糖,即泛型的自动类型推论:
然而,在 C# 中,编译器并不能像这样从上下文中自动推断出泛型的类型。你必须完整地书写泛型的定义:
当然,如果实在嫌类型名太长,也可以使用和 Java 中类似的 var 关键字自动推断整个类型名:
7. Collections 的输出
最后一点是关于 Collections 中数据的输出 / 序列化方式的。很不幸的是,和 Java 不同,C# 没有提供这些类的默认“toString”方法!这就意味着我们不得不自己手动把它们转换成字符串。
以下代码提供了一个相对较为简洁的把 List 转换为字符串的方法:
总结
如果真要把 C# 与 Java 不同的特性一一列举,那恐怕是写尽几篇文章也数不完了。但如果你能看清真正在日常开发中常用的语法特点,做到有的放矢,那 Java 的开发经验毋庸置疑能为你降低 C# 的学习门槛。当你能够快速投入到实战开发中后,便自然能以战代练,稳步提升自己。谨望本文能抛砖引玉,帮各位在之后的学习过程中少走一些弯路。
回复
使用道具
举报
田不辣和蜜三刀
田不辣和蜜三刀
当前离线
积分
23
2
主题
13
帖子
23
积分
新手上路
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
积分
23
发消息
发表于 2025-5-15 21:38:14
|
显示全部楼层
不错 支持一个了
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
数据库
快速回复
返回顶部
返回列表