【问题标题】:.NET naming convention for "ID" (anything identification: Capitalization)“ID”的 .NET 命名约定(任何标识:大写)
【发布时间】:2009-02-27 18:44:41
【问题描述】:

我正在统一这些不一致的命名约定 最近这个问题有点让我抓狂。

在我正在使用的代码库中,没有关于“ID”的约定; “ID”、“Id”甚至“iD”使用不一致。

****问题**:在 .NET 中,你们如何将“ID”大写? 例如,nodeID,nodeId? FolderID 还是 FolderId?

****Edit**:复数情况如何?那我应该做“NodeIDs”还是“NodeIds”?

谢谢

【问题讨论】:

  • 请记住,变量命名和 GUI 标签遵循不同的规则!在 GUI 上,是 ID 和 OK,而不是 Id 和 Ok。
  • 为什么 GUI 标签会与其他标识符不同?
  • 他们都应该遵循类似的规则。您看到的这种混乱是在 FxCop 和框架设计指南在 Microsoft 内部广泛传播之前发生的。您应该在所有新代码上使用“Id”和“Ok”。请参阅我的答案以获取我的帖子的链接,我会在其中更多地讨论这个问题。
  • 我试图找到同样问题的答案。身份证明是身份证件的另一种说法,对吗?这将解释“ID”的首字母缩写词。
  • 在我写这篇文章的时候,这个问题已经有将近六年的历史了。请参阅my answer,我在其中引用了 Microsoft 对 .NET Framework 4.5 的指导。

标签: .net naming-conventions


【解决方案1】:

大写是 2 个字母首字母缩略词。 UI、IP等

“Id”是标识符的缩写,因此应保持帕斯卡大小写。

【讨论】:

  • 在复数情况下它仍然没有首字母缩写词,所以我会说“NodeIds”。
  • “缩写”“应该保持帕斯卡大小写”的规则从何而来?例如,M-W 和 OED2 都将其称为“缩写”,并且都仍然使用全大写。
  • Visual Studio 中的代码分析支持此答案:“CA1709:Microsoft.Naming:通过将成员名称“InvoiceSearch.DeliveryID”中的“ID”更改为“Id”来更正其大小写。 'Id' 是一个缩写,因此不受首字母缩写词大小写指南的约束。”
  • 这也是一般 .NET 命名约定中的建议 (msdn.microsoft.com/en-us/library/vstudio/…)
  • @IlliaRatkevych,您可能想知道缩写词和首字母缩略词之间的区别。您给出的两个示例都是 Acronyms,其中每个字母代表一个单词,因此两个字母都应大写。缩写是单个单词的缩写形式,就像 Id 是“标识”的“缩写”一样。
【解决方案2】:

Microsoft's naming guidelines 建议使用全部大写的 2 个字母的首字母缩略词作为标识符(IP、IO、UI 等),因此 倾向于使用“ID”(即使它不是首字母缩略词),因为当我阅读它时,我仍然会单独说出这些字母。

但老实说,我认为微软也不知道/不知道如何处理 ID/Id:

ID

System.Runtime.InteropServices._Activator.GetIDsOfNames()
System._AppDomain.GetIDsOfNames()
System.Runtime.InteropServices._Attribute.GetIDsOfNames()
System.Type.GetTypeFromProgID()
System.Threading.Thread.ThreadID
System.Threading.Thread.GetDomainID()
System.Runtime.Serialization.ObjectHolder.ContainerID
System.Globalization.Calendar.ID
System.Globalization.CultureInfo.InvariantCultureID
System.Web.UI.Control.ClientID
System.Web.UI.Control.UniqueID

Id

System.AppDomain.GetCurrentThreadId()
System.AppDomain.GetIdForUnload()
System.AppDomain.IsDomainIdValid()
System.AppDomain.GetId()
System.Attribute.TypeId
System.TypeLoadException.ResourceId
System.Reflection.AssemblyAlgorithm.AssemblyAlgorithmAttribute.AlgorithmId
System.Runtime.Remoting.Lifetime.Lease.GetNextId()
System.Xml.Xpath.XPathNavigator.UniqueId
System.Data.OleDb.DBPropSet.PropertyId

(来自http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/dcb8e08b-026a-4903-a413-7dbdda131a82/

我想这就是他们发明智能感知的原因……

关于复数:在我看来,s 应该总是小写。

【讨论】:

  • “System.IO”似乎是正确的,而“System.Data.Common.DbDataReader”根据指南被错误命名 - 但这是被广泛接受的约定吗?
  • “老实说,我不认为微软知道该怎么做:”
  • @Sung - 为什么说 DbDataReader 名称错误?根据@Jeff Moser 提到的《框架设计指南》一书,他们写道,复合词写成单个词(例如“端点”)应该被视为单个词,因此 - Db 是缩写而不是首字母缩写词,应该是 Db而不是数据库。如果已经在谈论微软不知道该怎么办,你对这个System.Data.OleDb.DBPropSet 有何看法-微软,请决定:Db 还是 DB??
  • @BornToCode - 我现在迷路了......即使经过 5 年,我仍然在 Db 和 DB 上苦苦挣扎......我现在只坚持 Db。
  • 两个字母的缩写不是首字母缩写词,因此它们遵循缩写的约定规则,因此所有较新的 API 都使用 DbId
【解决方案3】:

自提出此问题以来,Microsoft 已更新其指南。

在 MSDN 文章 Capitalization Conventions (.NET Framework 4.5) 中,有一节名为大写复合词和常用术语。在本节的表格中,在命名标识符时,“标识符”的缩写给出了以下大写指南:

  • Pascal 大小写适用时,使用 Id(例如:System.Attribute.TypeId
  • Camel 大小写适用时,使用 id(例如:var id = 42;
  • 从不使用ID

【讨论】:

    【解决方案4】:

    最新的指南是“Id”,关于这个和其他的更多信息(例如“Ok”),请参阅最新的框架设计指南(第 2 版)上的 my post

    【讨论】:

    • 让我们一起“好吧”,让每个人都不开心:)
    • +1 以前从未听说过那本书(框架设计指南)。让我检查一下。听起来像是一本有趣的书。谢谢杰夫
    • 为什么是UserName,FileName,而不是HashTable? HashTable、用户名和文件名对我来说都更有意义。
    • @Mike - 我同意 Jeff Moser 的约定,但我也希望他解释一下。也许我们必须买这本书?
    • “Ok”应该大写“OK”,因为它是“oll korrect”的首字母缩写。
    【解决方案5】:

    当 ID 是标识符等的缩写时,我总是将其大写。它看起来不对,让我想起 Freud,否则——这绝对不是一件好事。

    【讨论】:

    • 容易说别人没有幽默感,很难意识到笑话是蹩脚的。 :D
    • 当我看到 Id 而不是 ID 是变量或函数名称中标识符的缩写时,我也倾向于想到弗洛伊德。 (@jfar 和 tvanfosson:我不认为这是在开玩笑,只是陈述事实。) +1 表示与我处于同一波长(并抵消了反对票)。
    • 当你看到木卫一时,你会想到木星的卫星吗?
    • 实际上,当我看到莎士比亚时,我会想到 SO,该死的无衬线字体! bartleby.com/70/50007.html
    • 我赞成你对弗洛伊德的评论投赞成票,但我还不同意将 ID 大写。我仍然在拉微软并选择今天看起来合适的那个。希望我们都能解决一些问题。
    【解决方案6】:

    如果您愿意检查字典,您会发现 ID 不被视为缩写。实际上,表单被指定为 ID 或 I.D。那里。这可能是因为它来自“身份文档”或“身份数据”之类的表达式,并且最初并未被视为“标识符”的缩写形式。因此表单ID不仅是推荐的,而且字典直接支持。

    【讨论】:

    • 大写是 2 个字母的首字母缩写词。 UI、IP 等。“Id”是 Identifier 的缩写,因此应保持帕斯卡大小写。
    • @Nickolaus:Douglas 的观点是字典中列出的单词 ID(至少在韦氏词典中得到了确认)全部大写,而不是 Id。
    【解决方案7】:

    我认为有些人使用“ID”而不是“Id”的原因是因为它是通常大写的“GUID”、“UUID”或“UID”的子集。

    我同意它应该是“Id”,但我认为它在很大程度上取决于上下文,因为在某些环境中它可能更适合使用“ID”。

    所以对我来说,“ID”是一个技术术语,是上述术语的子集,或者用于指代这些技术术语中的任何一个,而“Id”是任何类型标识符的简写,并且在非技术上下文中,当您需要一个人像在您的公共 API 或 UML 中那样阅读它,您应该(在我看来)使用“Id”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多