为什么C#和C ++使用_ <variablename>编码约定?</variablename>

时间:2010-09-29 16:49:15

标签: c# c++ coding-style

我看过太多的C#和C ++代码,其中变量命名约定似乎要求程序员在变量文本之前使用下划线来编写变量名。 e.gr。

int? _countMoney;

支持该惯例的理由是什么?

10 个答案:

答案 0 :(得分:25)

在C#中,我通常以_个私有字段作为前缀,但从不使用局部变量。这背后的基本原理是当我需要一个私有变量时,我输入_并且Intellisense过滤列表并且更容易找到。通过这种方式,我还可以区分私有变量和局部变量,我不再需要为类字段键入this.variablename,而只需_variablename

答案 1 :(得分:5)

这是识别私有成员变量的简单方法。

答案 2 :(得分:5)

你不应该在c ++中使用_作为前缀。以_开头的名称保留给编译器。

最常见的前缀是c ++是m_(如'member)

对于C#来说,使用_是非常常见的。

在我的网站上,我们使用相同数量的c ++和c#,我们总是使用m_来保持一致

答案 3 :(得分:5)

Microsoft成员命名准则指定您不为字段使用前缀。

不要为字段名称使用前缀。例如,不要使用g_或s_来区分静态字段和非静态字段。

您可以阅读Microsoft的名称here指南。 当然,这只适用于C#。

答案 4 :(得分:4)

与所有其他约定一样,它使代码更容易理解。

我已经将此视为私有字段的惯例 - 在这种情况下,很容易看到正在使用私有字段。

您可以询问有关hungarian notation的相同问题。

答案 5 :(得分:1)

与其他人一样,该命名约定有助于区分成员变量和本地变量。这有两个主要优点:

  • 帮助选择修改对象状态的位置(重要的是,例如,用于线程安全)
  • 防止命名冲突。我可以编写一个构造函数,如:

    SomeObject(int foo, int bar)
    {
      _foo = foo;
      _bar = bar;
    }
    

    这样,我不必将参数命名为new_foo或类似的东西。

答案 6 :(得分:1)

我不确定这个惯例背后的理由是什么。就个人而言,我不关心使用任何类型的变量名前缀来表示变量的范围,我也不特别关心在命名任何内容时使用下划线。使用“this”关键字并为私有实例/成员变量采用较低的camel-cased名称约定有什么不好?

public void IncrementFoo()
{
    this.foo += 1;
}

它只需要输入5个字符,但它非常明确。如果您已经为您的私有实例变量采用了较低的camel-cased约定,那么这会立即告诉您正在访问私有实例/成员变量,并且您不需要使用任何类型的前缀来表示它

答案 7 :(得分:0)

有时人们会在成员变量中这样做,以帮助将它们与局部变量区分开来。如果你是直接访问下划线变量,也许你应该使用getter / setter来代替访问。

答案 8 :(得分:0)

当我不得不做Java工作时,Eclipse中的Java开发人员注意到的东西,他们不会强调那些变量。原因是什么?成员变量在IDE中进行了颜色编码...觉得没必要这样说。从习惯来看,它很自然地发现,我发现通过一些视觉提示很容易在VS IDE中找到一个成员变量......而下划线就是因为它很受欢迎。在极少数情况下,您必须以最新的形式查看代码......文本......这些类型的东西帮助极大。

答案 9 :(得分:0)

_前缀在VB.NET中非常重要,因为它不区分大小写。我们使用C#和VB.NET进行编码,为了每个人的理智,在两种语言中使用相同的命名约定非常重要。