虽然可能没有一种正确的方式来格式化你的 C# 代码,但在你的团队中达成一致的风格可以产生更清晰、更易读和更具可扩展性的代码库。本页提供了在创建您自己的样式指南时需要牢记的有关类、方法和注释的提示和主要注意事项。
笔记:此处分享的建议基于 Microsoft 提供的建议。最好的代码风格指南规则是适合您的团队需求的规则。
您可以 在此处 找到代码样式指南示例或下载完整的电子书, 创建 C# 样式指南:编写更简洁、可扩展的代码。
除了命名之外,格式化还有助于减少猜测并提高代码清晰度。通过遵循标准化风格指南,代码审查不再关注代码的外观,而是更多地关注代码的功能。
旨在个性化您的团队格式化代码的方式。设置 Unity 样式指南时,请考虑以下每条代码格式建议。您可以选择省略、扩展或修改这些示例规则以满足您团队的需求。
在所有情况下,反思您的团队将如何实施每条格式规则,然后让每个人都统一应用它。请参阅您团队的风格指南来解决任何差异。你考虑格式越少,你的工作效率就越高,创造力也越高。
让我们看一些格式指南。
对 单行、只读属性 使用表达式体属性 (=>):这将返回私有支持字段。
其余所有内容均使用 表达式体 { get; set; } 语法:如果您只想公开公共属性而不指定支持字段,请使用 自动实现的属性。
对集合和获取访问器应用表达式体语法。如果您不想提供写访问权限,请记得将“setter”设为私有。将多行代码块的闭括号与开括号对齐。
脚本序列化是将数据结构或对象状态转换为 Unity 可以存储和稍后重建的格式的自动过程。出于性能原因,Unity 处理序列化的方式与其他编程环境不同。
序列化字段出现在 Inspector中,但您不能序列化静态、常量或只读字段。它们必须是公共的或者标有 [SerializeField] 属性。Unity 仅序列化某些字段类型,因此请参阅 文档 以了解完整的序列化规则。
使用序列化字段时请遵循以下基本准则:
使用 [SerializeField] 属性: SerializeField属性可以与私有或受保护的变量一起使用,使它们出现在 Inspector 中。这比将变量标记为公共可以更好地封装数据,并防止外部对象覆盖其值。
使用 Range 属性设置最小值和最大值:如果您想限制用户可以分配给数字字段的内容,则[Range(min, max)]属性非常方便。它还可以方便地将该字段表示为检查器中的滑块。
将数据分组到可序列化的类或结构中以清理 Inspector: 定义一个公共类或结构并用[Serializable]属性标记它。为想要在 Inspector 中公开的每种类型定义公共变量。
从另一个类引用此可序列化类。结果变量出现在检查器中的可折叠单位内。
C# 中有两种常见的缩进样式:
Allman 风格,也称为 BSD 风格(来自 BSD Unix),将左花括号放在新行上。
K&R 样式,或“唯一真正的括号样式”,将左括号与前一个标题保持在同一行。
这些缩进样式 也存在变化。本指南中的示例使用了 Microsoft 框架设计指南中的 Allman 风格。无论您选择哪一个团队,请确保每个人都遵循相同的缩进和括号样式。您还可以尝试以下部分中的提示。
缩进通常为两个或四个空格。让团队中的每个人都同意编辑器首选项中的设置,而无需引发 制表符与空格之间的激烈争论。
在适用于 Windows的 Visual Studio 中,导航到 “工具”>“选项”>“文本编辑器”>“C#”>“选项卡”。
在 Visual Studio forMac中,导航到 “首选项”>“源代码”>“C# 源代码”。选择 文本样式 来调整设置。
笔记:Visual Studio 提供了将制表符转换为空格的选项。
不要省略括号 —— 即使是单行语句也不要省略。括号增加了一致性,使得你的代码更易于阅读和维护。在这个例子中,括号清楚地将动作 DoSomething 与循环分开。
如果您需要添加 Debug 行或者稍后运行 DoSomethingElse,括号已经就位。将该子句放在单独的行上使您能够简单地添加断点。
不要从嵌套的多行语句中删除括号。在这种情况下删除括号不会引发错误,但可能会引起混淆。为了清晰起见,请使用大括号,即使它们是可选的。
格式可能有所不同,因此请在您的样式指南中记录您的团队偏好,并相应地标准化您的 switch 语句。
以下是缩进 case 语句的一个例子。
诸如间距之类的简单操作就能增强代码在屏幕上的外观。尽管个人格式偏好可能有所不同,但请考虑以下建议以提高可读性。
添加空格以降低代码密度。额外的空白使行的各部分之间产生视觉分离的感觉。
在函数参数之间的逗号后使用一个空格。
不要在括号和函数参数后添加空格。
不要在函数名称和括号之间使用空格。
尽可能避免括号内有空格。
在流控制条件前使用一个空格,并在流比较运算符和括号之间添加一个空格。
比较运算符前后使用一个空格。
保持行短并考虑水平空白。确定标准行宽(80-120 个字符),并将长行分成几个较小的语句,而不是让其溢出。
正如前面所讨论的,尝试保持缩进/层次结构。缩进代码可以提高可读性。
除非出于可读性考虑,否则不要使用列对齐。虽然这种间距可以使变量对齐,但它会使类型与名称的配对变得复杂。
然而,列对齐对于按位表达式或具有大量数据的结构很有用。但请注意,添加更多项目时,维持列对齐可能会带来更多工作量。一些自动格式化程序可能还会改变列的哪部分对齐。
您还可以充分利用垂直间距。将脚本的相关部分放在一起,并充分利用空行。尝试按照以下方法从上到下组织您的代码:
- 将相关或相似的方法组合在一起:代码需要合乎逻辑且连贯。将执行相同操作的方法放在一起,以便阅读您的逻辑的人不必在文件中跳来跳去。
- 使用垂直空格来分隔类的不同部分:例如,您可以在之间添加两个空白行:
- 变量声明和方法
- 类和接口
- if-then-else 块(如果它有助于提高可读性)
尽量减少这种情况,如果可能的话,在你的风格指南中跟踪它。
在代码中使用区域
#region 指令使您能够折叠和隐藏 C# 文件中的代码部分,从而使大文件更易于管理和更易于阅读。
但是,如果您遵循本指南中有关课程的一般建议,您的班级规模应该是可管理的,并且#region 指令是多余的。将代码分成更小的类,而不是将代码块隐藏在区域后面。如果源文件很短,您将不太愿意添加区域。
注意:许多开发人员认为这些区域是 代码异味或反模式。作为一个团队来决定你们站在辩论的哪一边。
如果这些格式规则看起来难以理解,请不要绝望。现代 IDE 使得设置和执行它们变得十分高效。您可以创建格式规则的模板,然后立即转换项目文件。
要设置脚本编辑器的格式规则:
- 在适用于 Windows的 Visual Studio 中,导航到 “工具”>“选项”,然后找到 “文本编辑器”>“C#”>“代码样式格式”。
- 使用设置来修改 常规、缩进、新行、间距和换行 选项。
- 在 Visual Studio forMac中,选择 “Visual Studio”>“首选项”,然后导航到 “源代码”>“代码格式”>“C# 源代码”。
- 选择顶部的 策略 ,然后转到 文本样式 选项卡。在 C# 格式 选项卡中,调整 缩进、新行、间距和换行设置。
要强制你的脚本文件符合样式指南:
- 在适用于 Windows的 Visual Studio 中,转到编辑 > 高级 > 格式化文档(Ctrl + K、Ctrl + D 热键组合)。如果只想格式化空格和制表符对齐,您也可以使用编辑器底部的 运行代码清理(Ctrl + K,Ctrl + E)。
- 在 Visual Studio for Mac中,转到 “编辑”>“格式化文档”(Ctrl + I 热键)。
在 Windows 上,您还可以通过 “工具”>“导入和导出设置”共享您的编辑器设置。导出具有样式指南的 C# 代码格式的文件,然后让每个团队成员导入该文件。
Visual Studio 帮助您遵守风格指南。格式化变得像使用热键一样简单。
笔记:您可以配置EditorConfig 文件(参见上文),而不是导入和导出 Visual Studio 设置。这样做有利于在不同的 IDE 之间共享格式。它还具有使用版本控制的额外好处。有关更多信息,请参阅 .NET 代码样式规则选项 。
虽然这并不是专门针对干净的代码,但请务必查看 使用 Visual Studio 加速 Unity 编程工作流程的 10 种方法。请记住,如果您应用这些提高效率的技巧,格式化和重构干净的代码会更加方便。