我看到了太多的C#和C++代码,其中变量命名惯例似乎要求程序员在变量文本之前使用下划线来编写变量名称。例如:
int? _countMoney;
支持该约定的原理是什么?
我看到了太多的C#和C++代码,其中变量命名惯例似乎要求程序员在变量文本之前使用下划线来编写变量名称。例如:
int? _countMoney;
在C#中,我通常使用_
作为私有字段的前缀,但从不用于局部变量。这样做的原因是当我需要一个私有变量时,只需键入_
,Intellisense就会过滤出列表,更容易找到。这样,我也能够区分私有和局部变量,并且我不再需要为类字段键入this.variablename
,而是直接用_variablename
。
这只是一种简单的方法来识别私有成员变量。
在c++中不应该使用_作为前缀。以_开头的名称是为编译器保留的。
c++中最常用的前缀是m_(如'member')
对于C#,使用_非常普遍。
在我们的网站上,我们同时使用c++和C#,始终使用m_以保持一致性。
m_
和 s_
来区分实例和静态字段。对我来说,这很重要,因为您应该假设静态字段可以被多个线程访问,因此您应该小心防止线程问题。以这种方式使用前缀使得一眼就能看出是否存在任何问题。这个约定是由Jeffery Richter提出的,他碰巧在制定这个准则时发表了意见。他在这个特定点上可能输了 :) - Brian Gideon就像其他人所说的那样,这种命名约定有助于区分成员变量和局部变量。这带来了两个主要优点:
防止命名冲突。我可以编写如下构造函数:
SomeObject(int foo, int bar)
{
_foo = foo;
_bar = bar;
}
这样,我就不必将参数命名为new_foo
之类的名称。
SomeObject(int foo, int bar) : foo(foo), bar(bar) {}
,然后"正确"的事情就会发生。 - Oliver Charlesworth我真的不确定这个约定背后的理由是什么。就我个人而言,我不喜欢使用任何类型的变量名前缀来表示变量的作用域,也不特别喜欢在命名中使用下划线。使用 "this" 关键字并采用小写驼峰式命名私有实例/成员变量有什么不好呢?
public void IncrementFoo()
{
this.foo += 1;
}
只需要多输入5个字符,但它非常明确。如果您已经采用了小驼峰命名法来命名私有实例变量,那么这就立即告诉您正在访问一个私有实例/成员变量,而您不需要使用任何前缀来表示它。
在我做Java工作时,我注意到Eclipse中的Java开发人员不会使用下划线来命名变量。原因是什么呢?成员变量在IDE中被彩色编码...因此他们觉得没有必要这么做。出于习惯,我发现在VS IDE中通过某些视觉提示定位成员变量很容易...而下划线就是这样一个相当流行的提示方式。在极少数情况下,你需要查看代码的原始形式——文本——这些类型的提示会极大地帮助你。
_
前缀在 VB.NET 中非常重要,因为它不区分大小写。我们使用 C# 和 VB.NET 进行编码,为了所有人的理智,重要的是在两种语言中具有相同的命名约定。