命名约定-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;
}