以_开头的变量名有什么含义?

64

当我使用C#编写我的第一个asp.net MVC应用程序时,我发现有一些变量的名称以下划线字符(_)开头。

这意味着什么?这有什么特殊含义吗?

8个回答

88

在语言上并没有定义这样的含义,它只是一种惯例,有些人用它来区分实例变量和局部变量。其他变化包括m_foo(以及s_foo或g_foo或静态变量)或mFoo;另外,有些人喜欢给局部变量(和参数)加上前缀而不是实例变量。

个人而言,我不使用这样的前缀,但这是一种风格选择。只要在同一项目上工作的每个人都保持一致,通常不会有太大问题。我见过一些非常不一致的代码...


2
局部变量和实例变量有什么区别?实例变量是绑定到对象本身的变量(从类中继承的属性或特征)。局部变量通常在方法或构造函数中使用。更多信息请参考:https://www.google.com/search?q=difference+between+local+and+instance+variables - carloswm85

35

一般来说,这意味着私有成员变量。


6
更一般地说,对于非公共实例字段(包括受保护的和内部的字段)。 - Noldorin
1
无论何时看到下划线,您都可以将其解释为“this.”。换句话说,这是一种速记方式。但要小心,在现代C#中,下划线也用于临时保留我们不会使用的结果:https://learn.microsoft.com/en-us/dotnet/csharp/discards,因此,“this.”的“旧”用法现在可能会令人困惑。 - zameb
1
@zameb 对的,但只有当变量名只是'_'时才成立,而不是以下划线开头的变量名。或者我漏掉了什么吗? - Keith Davidson
你是对的,Keith。 - zameb

14

在变量名 _val 前面添加下划线只是一种惯例。在C#中,当定义公共属性的私有成员变量时使用它。

我要补充一下 @Steven Robbins 说的:

private string _val;
public string Values
{
    get { return _val;}
    set {_val = value;}
}

5
很多人使用它们来处理私有变量(实际存储公共属性值的变量)。

2

使用''开头的实例属性有另一个优点,它会首先出现在Intellisense中。
创建值/模型/POCO类时,不使用'
'。


1
我知道这有点过时,但如果有人最终到了这里,我想补充一下这里的答案:如果你谈论的是.NET上的MVC,还有一个关于局部视图的命名约定,它们的名称也以下划线开头。
这些都是命名约定,你和你的团队可以决定是否遵循,只要大家都知道这个决定就可以了。我也使用它们来识别非公共字段,如private或protected。
如果你想进一步阅读,请点击这里

1
使用下划线作为属性私有变量的命名方式非常有用,可以避免在类内部意外调用变量而不是属性的情况发生(这很容易发生,只需简单的小写智能输入即可)。如果在属性的get{}中进行某种计算或聚合操作,那么你最不希望的就是在本意是完全调用属性时错过这个操作。

0

我曾看到它被用作参数的变量名,这些参数并没有被用作函数的一部分,而是作为一种“隐藏”它们的方式。

我不能说这是好事还是坏事,但它有效地表明了该参数不应在函数中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接