我很好奇其他人是如何使用这个关键字的。我倾向于在构造函数中使用它,但我也可能在整个类的其他方法中使用它。一些例子:

在构造函数中:

public Light(Vector v)
{
    this.dir = new Vector(v);
}

在其他地方

public void SomeMethod()
{
    Vector vec = new Vector();
    double d = (vec * vec) - (this.radius * this.radius);
}

当前回答

在Jakub Šturc的回答中,他关于在构造器之间传递数据的第5条可能需要一些解释。这是在重载构造函数中,并且是强制使用This的一种情况。在下面的例子中,我们可以使用默认形参从无参数构造函数调用参数化构造函数。

class MyClass {
    private int _x
    public MyClass() : this(5) {}
    public MyClass(int v) { _x = v;}
}

我发现有时候这是一个特别有用的功能。

其他回答

这个关键字在c#中有几种用法。

限定由相似名称隐藏的成员 将对象本身作为参数传递给其他方法 使对象从方法中返回自身 声明索引器 声明扩展方法 在构造函数之间传递参数 在内部重新分配值类型(struct)值。 在当前实例上调用扩展方法 转换为另一种类型 到同一类中定义的链构造函数

可以通过在作用域中不使用相同名称的成员变量和局部变量来避免第一种用法,例如通过遵循通用命名约定并使用属性(Pascal大小写)而不是字段(驼峰大小写)来避免与局部变量冲突(也是驼峰大小写)。在c# 3.0中,可以使用自动实现的属性轻松地将字段转换为属性。

我养成了在Visual c++中大量使用它的习惯,因为这样做会触发智能感知,当我按'>'键时,我很懒。(而且容易出现错别字)

但我继续使用它,因为我发现它很方便,可以看到我调用的是成员函数而不是全局函数。

除非万不得已,否则不要用this。

不必要的冗长是有惩罚的。您应该努力使代码的长度恰好与需要的长度相同,而不是更长。

黑C + +铝

我同意“非用不可”的说法。不必要地用它修饰代码并不是一个好主意,因为当你忘记这样做时,编译器不会警告你。这可能会给那些期待它一直在那里的人带来困惑,也就是说,他们必须考虑它。

那么,你什么时候会使用它呢?我只是看了一些随机的代码,并找到了这些例子(我不判断这些是好事还是坏事):

将“yourself”传递给一个函数。 将“你自己”分配给一个指针或类似的东西。 铸造,即上/下铸造(安全或其他),铸造constness等。 编译器强制消歧。

1 -常见的Java setter习语:

 public void setFoo(int foo) {
     this.foo = foo;
 }

2 -当调用以该对象作为参数的函数时

notifier.addListener(this);