命名约定-C+中的下划线+;和C#变量

命名约定-C+中的下划线+;和C#变量,c#,c++,naming-conventions,C#,C++,Naming Conventions,在类字段中经常会看到\u var变量名。下划线是什么意思?所有这些特殊的命名约定都有引用吗?它只是意味着它是类中的一个成员字段。没有特定的单一命名约定,但是我已经看到了私人成员的情况。微软的C#命名标准说变量和参数应该使用小写形式,即:paramName。该标准还要求字段遵循相同的格式,但这可能导致代码不清晰,因此许多团队要求使用下划线前缀以提高清晰度,即:\u fieldName 下划线只是一种约定;没别的了。因此,每个人对它的使用总是有所不同。以下是我对这两种语言的理解: C++中,下划线

在类字段中经常会看到
\u var
变量名。下划线是什么意思?所有这些特殊的命名约定都有引用吗?

它只是意味着它是类中的一个成员字段。

没有特定的单一命名约定,但是我已经看到了私人成员的情况。

微软的C#命名标准说变量和参数应该使用小写形式,即:
paramName
。该标准还要求字段遵循相同的格式,但这可能导致代码不清晰,因此许多团队要求使用下划线前缀以提高清晰度,即:
\u fieldName

下划线只是一种约定;没别的了。因此,每个人对它的使用总是有所不同。以下是我对这两种语言的理解:

C++中,下划线通常表示私有成员变量。

在C#中,我通常认为它仅在为公共属性定义底层私有成员变量时使用。其他私有成员变量不会有下划线。不过,随着自动属性的出现,这种用法在很大程度上已经过时了

之前:

private string _name;
public string Name
{
    get { return this._name; }
    set { this._name = value; }
}
之后:

public string Name { get; set; }

根据我的经验(当然有限),下划线将表示它是一个私有成员变量。正如Gollum所说,这将取决于团队。

我对类的成员变量使用_var命名。我这样做有两个主要原因:

1) 它帮助我在以后阅读代码时跟踪类变量和局部函数变量


2) 当我寻找类变量时,它在Intellisense(或其他代码完成系统)中很有帮助。只知道第一个字符有助于筛选可用变量和方法的列表。

许多人喜欢在私有字段前加下划线。这只是一个命名约定

C#的“官方”命名约定为私有字段规定了简单的小写名称(无下划线)


我不知道C++的标准约定,尽管下划线被广泛使用。

< P>这样的命名约定在读取代码时尤其有用,特别是不是自己的代码。强大的命名约定有助于指示特定成员的定义位置、成员类型等。大多数开发团队采用简单的命名约定,并在成员字段前面加下划线(
\u fieldName
)。在过去,我对C#使用了以下命名约定(它基于Microsoft对.NET framework代码的约定,可以通过Reflector看到):

实例字段:m\u字段名
静态字段:s\u字段名
公共/受保护/内部成员:PascalCasedName()
私人成员:camelCasedName()


这有助于人们在快速阅读不熟悉的代码时理解成员的结构、用法、可访问性和位置

这只是一些程序员在处理类的成员或其他类型的变量(参数、函数的局部变量等)时使用的一种惯例。成员变量也广泛使用的另一个约定是在名称前加上“m_3;”

无论如何,这些只是约定,您无法找到所有约定的单一来源。它们是风格的问题,每个编程团队、项目或公司都有自己的(甚至没有)。对于C#,Microsoft建议不要对公共成员使用下划线字符。对于private成员,可以使用下划线。事实上,(经常在指南中引用)例如使用m_,使用“s_”表示私有静态成员


就我个人而言,我用just u来标记我的私人成员。“My”和“Sy”在匈牙利符号上的边缘,这不仅是.NET中的皱眉,而且可以是非常冗长的,而且我发现许多成员很难按字母顺序快速地进行眼动扫描(想象10个变量都是以My开头)。实际上,<>代码> VaR 约定来自VB,而不是C++或C++(My,……是另一回事)。 这是为了克服VB在声明属性时不区分大小写的问题

例如,这样的代码在VB中是不可能的,因为它将
user
user
视为相同的标识符

Private user As String

Public Property User As String
  Get
    Return user
  End Get
  Set(ByVal Value As String)
    user = value
  End Set
End Property
所以为了克服这个问题,一些人使用了一种约定,在私有字段中添加“u”,如下所示

Private _user As String

Public Property User As String
  Get
    Return _user
  End Get
  Set(ByVal Value As String)
    _user = value
  End Set
End Property
由于许多约定都是针对.Net的,为了保持C#et VB.Net约定之间的一致性,它们使用相同的约定

我找到了我所说的参考:

带前导下划线的驼峰大小写。在里面 VB.NET,始终指示“受保护”或 “私人”,请勿使用“昏暗”。使用 不鼓励使用“m_3;”,使用 不同于 财产,特别是有 受保护的变量,因为它违反了 合规性,并将使您的生活 如果您在VB.NET中编程,会很痛苦,因为 你必须说出你的成员 一些不同于 访问器/变异器属性。最 此处的项目,前导下划线 是唯一有争议的。 我个人更喜欢它而不是直的 对于我的 私有变量,所以我没有 用“this”限定变量名 与中的参数进行区分 构造器或其他我 可能会发生命名冲突。 由于VB.NET不区分大小写,因此 更重要的是你的 访问器属性通常具有 与您的私人会员同名 除下划线外的其他变量。 就m_而言,这真的只是 关于美学。我(和许多其他人) 发现m_uu丑陋,因为它看起来像那里 变量名中有一个洞。它是 几乎是冒犯性的。我过去经常用它 VB
public class CSharpClass
{
    protected int field;
    public int Field { get { return field; } }
}
Public Class VBClass
    Inherits CSharpClass

    Function Test() As Integer
        Return Field
    End Function

End Class
g++ -E helloWorld.cpp
   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
   try
     {
       __streambuf_type* __sb = this->rdbuf();
       if (__sb)
  {
    if (__sb->pubsync() == -1)
      __err |= ios_base::badbit;
    else
      __ret = 0;
  }
private readonly ILogger<MyDependency> _logger;

public MyDependency(ILogger<MyDependency> logger)
{
    _logger = logger;
}