【问题标题】:What does "o" mean as a variable prefix?“o”作为变量前缀是什么意思?
【发布时间】:2011-02-23 20:08:14
【问题描述】:

在 oCn?规则是什么?

using(SqlConnection oCn = new SqlConnection(
        "Server=(local);Database=Pubs;User ID=TestUser1;Password=foo1;")) {
        oCn.Open();
        ...
    }

我在这篇文章中发现了这种命名方式http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

【问题讨论】:

  • 也许是某人的约定..
  • 它的意思是原作者想要表达的意思。您可以随意命名变量。
  • 也许“打开”连接?
  • 它可能意味着“对象”。早在 VB 时代,对象和类就很重要,所以人们在他们的对象前面加上“o”,在他们的类前面加上“cls”。
  • @Matt:不。每个问题的形式都是“X 在 C# 中是什么意思?”答案只有一个:“无论 Jon Skeet 想要什么。”

标签: c# naming


【解决方案1】:

一种完全过时的说法,“Cn”是*o*bject。

【讨论】:

  • 这真的总结得很好:)
  • 我要冒昧地说,对于不强制类型的系统(例如脚本语言)来说,它并没有过时。在变量名称中编码所需的类型有助于理解程序中要发生的事情。
  • @PeterM:它可以帮助理解。直到您决定将类型更改为其他类型,此时它完全没有意义。
【解决方案2】:

恐怕它是某个对象的一些hungarian dialect notation 的剩余部分。

在 C# 和 .NET 中,我认为这毫无用处。

编辑顺便说一句,我认为包含类型和/或范围信息的匈牙利表示法在 C# 中是无用的。 I do like Apps Hungarian notation

【讨论】:

  • 我唯一喜欢的“符号”是I 用于接口。我很高兴它停留在 C# 中。
  • 我一直很喜欢最后添加的“java”-able。没有比 ISerializable 更好的了。
  • 我不喜欢 -able,因为它破坏了“我序列化”的无可挑剔的语法。通过在“我是可序列化的”中省略“am”。想象一下,如果 Apple 将其称为 iPhonable。
  • @Dan - 可序列化或能够序列化之间有很大区别。
  • 这是一种解释。我的想法更像是继承“IMelt”的冰淇淋,这意味着物体本身可以融化,而不是继承“IMelt”的喷灯,意味着它会融化其他东西。因为这是一个接口,而不是一个基类,所以应该清楚我们不是继承动作(融化[序列化]其他对象的能力)而是交互方法(被某物融化[序列化]的能力) .还有一些名字不能很好地与 -able 一起使用。例如,“IEnable”与“IEnable”。
【解决方案3】:

在这种情况下,“o”表示对象。这是尝试使用匈牙利符号的“系统”变体。

匈牙利语有两种类型:Systems and Apps。系统使用前缀来标识存储的数据类型。例如,iCounter 中的“i”表示该变量是一个整数。

Apps 匈牙利语采用了完全不同的方法,并指定前缀应指示数据的用途。例如,rwPosition 中的“rw”表示行。

windows api 使用系统匈牙利语。这导致大量其他程序员也在使用它。不幸的是,当对 api 进行更改时,即使实际数据类型发生更改,它们也会保留旧的变量名。这导致了对于给定 API 函数的参数应该传递什么数据类型的大量混淆。尤其是各种把手周围。

在 .Net 编码指南中,MS explicitly states that hungarian shouldn't be used。现实情况是他们在谈论“系统”匈牙利语;我 100% 同意。另一方面,“应用程序”匈牙利语有很多用途,因为您描述的是数据,而不是类型。

在一天结束时,只需删除“o”。它不会给程序添加任何内容。

哦,为了有趣的阅读,请查看 Joel 对此的看法:http://www.joelonsoftware.com/articles/Wrong.html

【讨论】:

    【解决方案4】:

    这可能意味着 object 就像在某些复杂类型中,它与命名字符串 strMyString 和整数 iMyInt 等的相同(荒谬)约定不太匹配。

    【讨论】:

      【解决方案5】:

      这个“规则”直接来自How To Write Unmaintainable Code

      o_apple obj_apple

      为类的每个实例使用“o”或“obj”前缀,以表明您正在考虑大的、多态的图片。

      【讨论】:

        【解决方案6】:

        o 代表对象,

        这是一个不是很有用的约定,其中变量的类型包含在名称中,因此字符串是 strWhatever。有时我什至看到了 obj,即 objCn

        【讨论】:

          【解决方案7】:

          正如@Humberto 建议的那样,似乎是使用Hungarian Notation 的开发人员。

          【讨论】:

            【解决方案8】:

            当我 10 年前开始担任程序员时,我工作的公司使用了类似的命名约定。我不记得约定名称是什么,但我记得所有对象实例都有“o”前缀,代表 Object。

            【讨论】:

              猜你喜欢
              • 2012-10-12
              • 1970-01-01
              • 2010-10-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-22
              相关资源
              最近更新 更多