C# 有一个名为 StyleCop 的工具由 Microsoft 编写,它为您提供了一些默认规则,我发现这些规则对于结束团队之间关于代码风格的任何争吵非常有用。默认规则声明所有类变量必须使用以下语法来引用类变量:
this.classVariable // C# Default StyleCop Naming Convention
C# 中的主要替代方法是改用前导下划线:
_classVariable // C# Alternative StyleCop Naming Convention
C++ 似乎有大量的naming restrictions这排除了前导下划线,因为这是为库和操作系统保留的。像这样使用“this”关键字怎么样,这是一种常见的语法吗?
this->classVariable // C++
我不希望这篇文章陷入关于风格的争论。 我不是在询问您对编码风格的看法。我只想知道最常见样式的简短列表,以及上面的示例是否常用,所以我可以选择一个并继续。
更新
我不确定为什么这个问题被搁置了。提出了具体问题,我们得到了一个非常好的答案。任何地方都没有发表意见。不可否认,这是一个敏感的话题,但我认为最终一切顺利。
据我所知,有3种样式。
首先,使用下划线:
class Person
{
private:
int _age;
...
您担心命名限制,但不用担心 - 第一个下划线 + 非-大写 在非全局名称上 不是非法的。
(第一个下划线 + 大写 是非法的;您不能使用这样的名称:_Age
。)
其次,使用m_
。 (m
表示成员。)
class Person
{
private:
int m_age;
...
MFC中用的就是这种风格,我也比较喜欢这种。
第三,在名称的最后部分使用下划线。
class Person
{
private:
int age_;
...
虽然看过的次数不多,但以前看过>o<
好吧,您也可以正常命名所有类变量并使用 this->
。
class Person
{
private:
int age;
...
public:
void SetAge(int age) { this->age = age; }
...
然而,这并没有被广泛使用;最重要的是,它很不方便。 (此外,我几乎没有在 C# 中看到 this.var
样式,除了工具生成的源代码 - 它真的在 C# 中广泛使用吗??)
如您所见,this->
语法用于避免这种模棱两可的情况:
void Person::SetAge(int age)
{
age = age; // what does it mean?
}
(另外,在这种情况下,age
是参数;因为它比Person::age
更本地化,所以本地age
隐藏 Person::age
。)
但它并没有像我说的那样被广泛使用。在这种情况下,编辑其中一个 age
的名称比使用 this->
要好得多。
this
指针仅表示我自己;像任何其他具有 class
的语言一样,包括 C#,它的用法如下:
void SomeUtilFunction(Person *pPerson);
void Person::Foo()
{
...
SomeUtilFunction(this); // refer to myself
...
}