那个。NET Core 项目已经开发出来,现在正在 GitHub 上以开源的方式进行维护。然而,就像每个项目一样,为了成为“好公民”,你必须遵循一些编码规则和行为准则。在这一章中,我们将讲述如果你想为这个项目做贡献,你必须遵循的编码准则。
在某个时间点,团队将根据编码指南(我们将在本章后面讨论)重新设计项目的完整代码库。同时,您应该:
NOT
发送样式更改的 PRs。例如,不要发送 PRs 将所有出现的 Int32 重命名为 Int。NOT
发送 PRs 以升级代码,从而使用更新的语言功能。这些特性可以在新代码中使用,但是对于现有代码来说,这是一个全新的东西。GIVE
优先考虑您正在更改的项目或文件的当前样式,即使它偏离了一般准则。NOT
向主分支机构提交已全部装运的任何类型的原料药增补。NET 框架。此外,不要向尚未批准的原料药提交公关。INCLUDE
添加新功能时进行测试。修复 bug 时,首先添加一个测试,突出显示当前行为是如何被破坏的。KEEP
讨论集中。NOT
用大拉请求给团队惊喜。相反,提出一个问题并开始讨论,这样团队可以帮助你的发展。NOT
提交没有写的代码。如果您发现您认为很适合添加的代码。NET Core,提出一个问题并开始讨论,然后再继续。NOT
提交更改许可相关文件或标题的 PRs。
一般规则是遵循 Visual Studio 默认值。然而,还有一些更详细的案例。对于 C++文件(。cpp 和。h),您应该使用 clang-format(3.6+版)。更改任何 C++或 H 文件后,合并前,运行位于src/Native/format-code.sh
的 shell 脚本;该脚本将确保所有本机代码文件都遵循编码风格准则。
对于非代码文件(。xml 等。)没有具体的规则,但一般来说,您应该享有与已经编写的内容保持一致的特权。编辑文件时,保持新代码和更改与文件中的样式一致。在新文件的情况下,您应该继续遵循相同类型的其他文件中使用的约定。最后但并非最不重要的一点:运用良好的判断力。如果一个组件是新的,一定要使用在那种情况下被广泛认为是合适的。
使用 GitHub 上的官方项目文档作为来源,这里是您应该遵循的完整指南列表:
- 我们使用 Allman 样式大括号,其中每个大括号都从一个新行开始。一个单行语句块可以不带大括号,但是该块必须在自己的行上适当缩进,并且不能嵌套在使用大括号的其他语句块中(参见第 381 期的示例)。
- 我们使用四个空格的缩进(没有制表符)。
- 内部和私有字段我们用
_camelCase
,可能的话用readonly
。用_
给实例字段加前缀,用s_
给静态字段加前缀,用t_
给线程静态字段加前缀。在静态字段上使用时,readonly
应该在静态之后(即static readonly
而不是readonly static
)。 - 除非绝对必要,否则我们避免
this.
。 - 我们总是指定可见性,即使它是默认的(即
private string _foo
而不是string _foo
)。可见度应该是第一个修饰符(即public abstract
而不是abstract public
)。 - 命名空间导入应该在文件顶部指定,在
namespace
声明之外,并且应该按字母顺序排序。 - 任何时候都要避免多条空行。例如,在一个类型的成员之间不要有两个空行。
- 避免虚假的自由空间。例如,避免 if
(someVar == 0)...
,其中点标记虚假的自由空间。如果使用 Visual Studio,请考虑启用“查看空白(Ctrl+E,S)”,以帮助检测。 - 如果文件的样式与这些准则不同(例如,私有成员的名称为
m_member
,而不是_member
,则该文件中的现有样式优先。 - 我们只在很明显变量类型是什么的时候使用
var
(即var stream = new FileStream(...)
而不是``var stream = OpenStandardInput())
。 - 我们用语言关键词代替 BCL 类型(即
int
、string
、float
代替Int32
、String
、Single
等。)对于类型引用和方法调用(即int.Parse
而不是``Int32.Parse)
。 - 我们使用 PascalCasing 来命名所有的常量局部变量和字段。唯一的例外是互操作代码,其中常量值应该与您通过互操作调用的代码的名称和值完全匹配。
- 我们用
nameof(...)
代替“...
”只要有可能和相关。 - 如果你认为遵循这些规则会很难,不要担心——团队已经提供了一个
.vssettings
文件来自动正确设置 Visual Studio 格式。该文件位于corefx
回购的根目录。此外,有一个基于罗斯林的工具,你可以用来检查你的代码的“健康”。这个工具叫做CodeFormatter
,在项目内部被积极使用。这里有。
在开源项目中,许可是关键。麻省理工学院的许可证主要由。NET Core,但微软生产的发行版。NET Core 使用。NET 库许可证。那个。NET Core repo 也可能包含不同许可的来源,团队在需要时会在第三方通知中概述它们。。NET Core 二进制文件是单独生产和许可的。