【问题标题】:C# naming conventions for acronyms首字母缩写词的 C# 命名约定
【发布时间】:2010-01-21 12:38:22
【问题描述】:

关于首字母缩略词的 C# 命名,如果我正在编写与 Windows API 相关的库,是否对 WindowsApi 或 WindowsAPI 有任何严格的约定,或者只是个人喜好?

【问题讨论】:

    标签: c# naming-conventions


    【解决方案1】:

    有一个约定,它为长度超过 2 个字符的所有首字母缩写词指定首字母大写,其余小写。因此HttpContextClientID

    【讨论】:

    • Id - 最好大写。 “另外两个常用的术语本身就属于一个类别,因为它们是常见的俚语缩写。“Ok”和“Id”这两个词(它们应该如图所示)是该指南的例外,没有名称中应使用缩写"。 《框架设计指南》第 2 版,第 44 页。
    • 有人指出,如果 ID 代表“Identifying Datum”(而不是“Identifier”),那么 ID 就可以了。抱歉,好的。
    • @Sergey Teplyakov Microsoft 指南说仅对超过 2 个字符的缩写使用 Pascal。在 ID 和 OK 的情况下,所有大写都可以,但是 HTML 变为 Html。 msdn.microsoft.com/en-us/library/141e06ef(v=VS.71).aspx
    • @smdrager:公平地说,这仅明确推荐用于首字母缩略词,而不是缩写词。
    • 可以注意到微软自己并没有非常严格地遵循这个约定。例如,他们在某些地方使用 DbContext,而在其他地方使用 DBNull。
    【解决方案2】:

    Framework Design Guidelines”第二版,Krzysztof Cwalina 和 Brad Abrams pp.40-42

    3.1.2 首字母大写

    将两个字符的首字母缩写词中的两个字符大写,驼峰式标识符的第一个单词除外。

    System.IO
    public void StartIO(Stream ioStream)
    

    务必仅将具有三个或更多字符的首字母缩略词的第一个字符大写,但驼峰式标识符的第一个单词除外。

    System.Xml
    public void ProcessHtmlTag(string htmlTag)
    

    请勿在驼峰式标识符的开头将任何首字母缩略词的任何字符大写,无论其长度如何。

    【讨论】:

    • 如果我看到这个奇怪的“2 个字母首字母大写”规则,我总是很头疼。微软似乎意识到 System.IO 被命名错误并决定围绕它制定规则。但是如何命名 Microsoft Visual Studio 的标识符呢? MSVSID?我说 MsVsId 会更好/更一致。
    • 不幸的是,他们不遵循自己的命名约定。看看本文中Dto的使用:docs.microsoft.com/en-us/aspnet/web-api/overview/data/…
    • 有谁知道为什么会出现 2 字母规则?背后的原因是什么?
    • @rory.ap - 我认为它植根于 20 多年前芝加哥风格手册的建议。我记得在技术作家以前的硬拷贝中看到过它,但不知道它是否还在。也可能是为了避免与“Id”这个词的含义冲突,这个词在今天可能看起来很模糊,实际上是当时流行文化的一小部分en.wikipedia.org/wiki/I_Got_Id
    【解决方案3】:

    Naming Guidelines & Capitalization Conventions上查看微软的官方文档:

    要区分标识符中的单词,请将标识符中每个单词的首字母大写。不要在标识符中的任何地方使用下划线来区分单词,或者就此而言。根据标识符的用途,有两种适当的方式将标识符大写:

    • PascalCasing
    • camelCasing

    PascalCasing 约定,用于除参数名称外的所有标识符,将每个单词的第一个字符(包括长度超过两个字母的首字母缩写词)大写,如以下示例所示:

    • PropertyDescriptor
    • HtmlTag

    双字母首字母缩写词的特殊情况是两个字母都大写,如以下标识符所示:

    • IOStream

    camelCasing 约定,仅用于参数名称,将除第一个单词之外的每个单词的第一个字符大写,如以下示例所示。如示例还所示,以驼峰式标识符开头的双字母首字母缩写词都是小写。

    • propertyDescriptor
    • ioStream
    • htmlTag

    ✓ 务必对由多个单词组成的所有公共成员、类型和命名空间名称使用 PascalCasing。

    ✓ 做使用camelCasing作为参数名称。

    【讨论】:

    • 该文档适用于 .NET 1.1。
    • 我看不出有什么不同?他们并没有改变每个版本或任何东西之间的约定。
    • 第二版的设计指南。我没有比较以确定命名没有任何变化。
    • .NET 4.5 与大写有关的指南:msdn.microsoft.com/en-us/library/ms229043(v=vs.110).aspx
    • Microsoft 的做法随着时间的推移发生了变化。 ——虽然很微妙。 -- 正如其他人所指出的,.NET 1.1 中的“DBNull”与 .NET 4.5 中的“DbContext”。
    【解决方案4】:

    老问题,新答案。

    根据.NET 4 Capitalization Rules for Acronyms

    双字符首字母缩写词的两个字符都大写,除了 驼峰式标识符的第一个单词。

    一个名为 DBRate 的属性是一个简短的首字母缩写词 (DB) 的示例,用作 Pascal 大小写标识符的第一个单词。一个名为的参数 ioChannel 是用作第一个单词的简短首字母缩写词 (IO) 的示例 驼峰式标识符。

    只有三个或三个以上的首字母缩写词的首字母大写 字符,除了驼峰式标识符的第一个单词。

    名为XmlWriter 的类是一个长首字母缩写词的示例,用作 Pascal 大小写标识符的第一个字。名为htmlReader 的参数 是用作 a 的第一个单词的长首字母缩写词的示例 驼峰式标识符。

    不要将任何首字母缩略词的任何字符大写,无论 它们的长度,在驼峰式标识符的开头。

    名为 xmlStream 的参数是使用的长首字母缩写词 (xml) 的示例 作为驼峰式标识符的第一个单词。一个名为的参数 dbServerName 是用作第一个缩写词 (db) 的示例 驼峰式标识符的单词。

    【讨论】:

      【解决方案5】:

      我听说你应该避免缩写,所以它会变成WindowsApplicationProgrammingInterface

      更严重的是(人们似乎误读了上面的内容,尽管下面引用了),this page 说:

      三个或更多字母的任何首字母缩写词都应该是 Pascal 大小写,而不是全部大写。

      由于 API 被认为是一个众所周知的首字母缩略词,因此如果您想遵循指南,则可以选择名称 WindowsApi

      【讨论】:

      • 如果缩写在域中是众所周知的,则可以。 API 在编程中是众所周知的。
      • +1。 《框架指南》一书建议您避免使用缩写词或首字母缩略词,或者使用 PascalCase。我会建议 WindowsApi。来自框架的示例:Uri、UriBuilder HtmlDecode。
      • @John:是的,我对那个有点半开玩笑。 :)
      • @unwind - 这是否意味着我们可以使用 html 而不是 HyperTextMarkupLanguage?
      • -1:来自框架设计指南:“一般来说,避免在标识符名称中使用首字母缩略词很重要,除非它们是常用的并且任何可能使用框架的人都能立即理解。例如、HTML、XML 和 IO 都很好理解,但鲜为人知的首字母缩略词绝对应该避免”。 API - 常用且易于理解的首字母缩略词。
      【解决方案6】:

      这只是个人(或组织)偏好。只要你保持一致,你会没事的。

      .NET Framework 本身将使用 WindowsApi。

      【讨论】:

      • 这个。刚刚举了一个例子,APP的商业首字母缩写词被用作“App”,现在看起来像是“Application”的缩写,而不是它的实际含义。
      【解决方案7】:

      个人喜好。但是.NET 会使用WindowsApi。类似于TcpClient的命名。

      【讨论】:

        【解决方案8】:

        也看看 FxCop。这是一个很好的实用程序,可以帮助解决此类问题。

        【讨论】:

          【解决方案9】:

          以下是一些需要遵循的简单规则:

          如果标识符是camel-cased,则始终将第一个单词全部小写,无论它是首字母缩略词还是单词。如果首字母缩略词在标识符中的任何其他位置,则无论其长度如何,都只大写第一个字母。

          如果标识符是pascal-cased,则将两个字母首字母缩写词的两个字母大写,或者只将由三个或更多字母组成的首字母缩写词的第一个字母大写,而不管它在标识符中的位置。

          对于 2 个字母的首字母缩略词,例如 Db in ApplicationDbContext,这些规则有一些例外。

          [示例]

          驼峰式标识符: ioStreamhtmlElementdataGrid

          Pascal 大小写标识符: IOStreamTcpClientCustomerDto

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-16
            • 1970-01-01
            • 1970-01-01
            • 2011-01-15
            • 1970-01-01
            相关资源
            最近更新 更多