我应该使用"this"来调用类属性,成员或方法吗?

Ben*_*gan 14 c# c++ java coding-style

我见过一些指南或博客说this用来访问班级自己的成员是不好的.但是,我也看到了一些专业人士正在访问的地方this.我倾向于明确使用this,因为它似乎清楚地表明我正在访问的东西是类的一部分.

this.MyProperty = this.GetSomeValue();
Run Code Online (Sandbox Code Playgroud)

使用有一些优点或缺点this吗?这只是一种风格偏好吗?

小智 13

如果它增加了代码的清晰度,则使用它,如果它没有.有一些地方确实增加了清晰度 - 例如在C++中:

struct Point {
   int x, y;
   Point & operator=( const Point & p ) {
      this->x = p.x;
      this->y = p.y;
      return *this;
   }
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当你有两个相同类型的对象引用时,我发现使用this可以澄清事物(虽然注意在C++中上面的赋值运算符实现是没有必要的).


her*_*ter 6

我总是使用this.它,因为它使代码在我看来更具可读性.它立刻就清楚了

  • 它是此实例的成员.
  • 澄清基类是否被调用(base.)或覆盖成员(this.)
  • 它不是静态成员.
  • 它不是对另一个静态类(this.Monster.Legs.Run();vs Monster.Legs.Run();)成员的调用.


Chr*_*s S 3

从使用了this多年,到发现没有多少人(至少根据我的经验)使用它,我最终改变了。我可以看到使用更少的代码的好处:

  • 我使用下划线: _myVar表示私有变量,它们不需要 a,this因为它们始终是成员变量。
  • 对于方法调用,很明显它是类的一部分。如果不是,您可以在前面添加类型名称。
  • (C#)私有变量和参数始终采用驼峰式大小写。
  • 如果你的类太大了,那么你就会感到困惑,无论如何,你都会遇到凝聚力和关注点分离的问题。
  • (C#) Visual Studio 颜色代码类型,以便您知道您是否正在使用属性或类型:

例如

someclass.Method(1);
SomeClass.StaticMethod(1);
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果您不使用下划线命名约定,并且拥有一个带有沉重主体的大型方法,则可能会导致一些混乱。

静态方法或属性有时会造成混乱,但这种情况很少见。

显然,在传递引用时您总是需要this关键字,例如:

someclass.Method(this);
var someclass = new SomeClass(this);
Run Code Online (Sandbox Code Playgroud)

我写C#,但我的答案与Java有关

  • 不要使用前导下划线来命名 C++ 中的变量。如果您想要下划线,请使用尾随下划线,如“myVar_”——这就是我所做的,并且它是一致的。 (3认同)