我相信我会因此而受到抨击,但就这样吧。
它被称为 Microsoft 的 .NET 库指南,但实际上是Brad Abrams 的观点(在此处记录)——还有其他有正当理由的观点。
人们倾向于接受大多数人的观点,而不是对特定风格有充分的理由。
重要的一点是评估为什么使用特定样式以及为什么它比另一种样式更受欢迎 - 换句话说,选择一种样式不仅仅是因为每个人都说这是要做的事情 - 自己思考。
不使用旧式匈牙利语的基本原因是使用的缩写对于每个团队都不同并且难以学习 - 这很容易通过不使用缩写来解决。
随着可用开发工具的变化,样式应该更改为最有意义的样式 - 但每个样式项都有充分的理由。
以下是我的风格指南以及我的理由——我一直在寻找改进我的风格的方法,以创建更可靠、更易于维护的代码。
变量命名约定
我们对变量命名约定都有自己的看法。有许多不同的样式将有助于生成易于维护的高质量代码 - 任何支持有关变量的基本基本信息的样式都可以。特定命名约定的标准应该是它有助于生成可靠且易于维护的代码。不应该使用的标准是: 丑陋的微软(即布拉德艾布拉姆斯)说不要使用那种风格 - 微软并不总是产生最可靠的代码,只是看看 Expression Blend 中的错误。在阅读代码时,变量名称应立即传达有关该变量的三个基本事实,这一点非常重要:它的作用域它的类型清楚地了解它用于作用域:Microsoft 建议完全依赖 IntelliSense。IntelliSense 很棒;但是,人们根本不会将鼠标悬停在每个变量上以查看其范围和类型。假设一个变量在它不在的范围内可能会导致重大错误。例如,如果引用变量作为参数传入并且在本地范围内进行了更改,则该更改将在方法返回后保留,这可能是不需要的。如果在本地范围内修改了字段或静态变量,但有人认为它是局部变量,则可能会导致意外行为。因此,能够只查看一个变量(而不是鼠标悬停)并立即知道它的范围是非常重要的。如果引用变量作为参数传入并在本地范围内更改,则更改将在方法返回后保留,这可能是不需要的。如果在本地范围内修改了字段或静态变量,但有人认为它是局部变量,则可能会导致意外行为。因此,能够只查看一个变量(而不是鼠标悬停)并立即知道它的范围是非常重要的。如果引用变量作为参数传入并在本地范围内更改,则更改将在方法返回后保留,这可能是不需要的。如果在本地范围内修改了字段或静态变量,但有人认为它是局部变量,则可能会导致意外行为。因此,能够只查看一个变量(而不是鼠标悬停)并立即知道它的范围是非常重要的。
建议使用以下表示范围的样式;但是,任何样式都是完全可以的,只要它清楚一致地指示变量的范围: m_ 字段变量 p_ 传递给方法的参数 s_ 静态变量局部变量 类型:如果认为他们正在使用特定类型,则可能会发生严重错误他们实际上是在使用不同的类型——同样,我们根本不会将鼠标悬停在任何变量上来确定它的类型,我们只是假设我们知道它的类型是什么,这就是错误是如何产生的。
缩写:缩写是邪恶的,因为它们对不同的开发人员可能意味着不同的东西。一位开发人员可能认为前导小写“s”表示字符串,而另一位开发人员可能认为它表示有符号整数。缩写是懒惰编码的标志 - 花一点额外的时间并输入全名,以使必须维护代码的开发人员清楚。例如,“str”和“string”之间只有三个字符的区别——让代码易于维护并不需要更多的努力。
内置数据类型的通用且清晰的缩写仅是可接受的,但必须在团队内部进行标准化。
自记录代码:为变量名称添加清晰的描述可以让其他开发人员轻松阅读和理解代码 - 使名称易于理解,以便团队经理无需成为开发人员即可阅读和理解代码。
变量名称部分的顺序:推荐的顺序是作用域类型描述,因为:IntelliSense 将对所有相似作用域进行分组,并且在每个作用域内 IntelliSense 将对所有相似类型进行分组,这使得查找变得容易 - 尝试以其他方式查找变量这使得它非常容易查看和理解范围以及查看和理解类型 这是一种相当常见的样式,易于理解 它将通过 FxCop
示例: 下面是几个示例: m_stringCustomerName p_stringCustomerDatabaseConnectionString intNumberOfCustomerRecords 或 iNumberOfCustomerRecords 或 integerNumberOfCustomerRecords 这些简单的规则将显着提高代码的可靠性和可维护性。
控制结构单行语句 所有控制结构(if、while、for 等)单行语句都应该用大括号括起来,因为很容易添加新语句而不会意识到给定语句属于控制结构,该控制结构将在不产生任何编译时错误的情况下破坏代码逻辑。
方法异常包装
所有方法都应该用一个外部 try-catch 包装,它可以捕获、提供一个地方来恢复、识别、定位、记录,并做出是否抛出的决定。导致我们的应用程序崩溃的是意外异常 - 通过包装捕获所有未处理异常的每个方法,我们保证识别和记录所有异常,并防止我们的应用程序崩溃。这需要更多的工作,但结果非常值得付出努力。
压痕
压痕不是主要问题;但是,建议使用四个空格而不使用制表符。如果打印代码,第一个打印机选项卡通常默认为 8 个空格。不同的开发人员倾向于使用不同的标签大小。Microsoft 的代码通常缩进 4 个空格,因此如果使用任何 Microsoft 代码并且使用 4 个空格以外的空格,则需要重新格式化代码。四个空格使它变得简单和一致。