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

在构造函数中:

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

在其他地方

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

当前回答

我不能相信所有的人都说使用它总是一个“最佳实践”之类的。

当存在歧义时使用“this”,如Corey的例子,或者当需要将对象作为参数传递时,如Ryan的例子。没有理由以其他方式使用它,因为能够基于作用域链解析变量应该足够清楚,因此不需要用它来限定变量。

编辑:关于“this”的c#文档指出了“this”关键字除了我提到的两种用途之外的另一种用途——用于声明索引器

编辑:@Juan:嗯,我在我的语句中没有看到任何不一致的地方-有3个实例,当我使用“this”关键字时(在c#文档中有记录),而这些时候你实际上需要它。在构造函数中,当没有阴影发生时,在变量前面加上“this”只是浪费我的击键和阅读它的时间,它没有任何好处。

其他回答

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

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

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

我基本上只在从同一类型中引用一个类型属性时使用这个。正如另一个用户提到的,我还强调了本地字段,这样它们就不需要这样做了。

我只在需要的时候使用它,除了对称操作,由于单参数多态性不得不把它放在一边的方法中:

boolean sameValue (SomeNum other) {
   return this.importantValue == other.importantValue;
} 

就我个人而言,我在引用成员变量时总是尝试使用这个。它有助于澄清代码并使其更具可读性。即使没有歧义,第一次阅读我的代码的人也不知道这一点,但如果他们看到始终使用这个,他们就会知道他们是否在查看成员变量。

我倾向于用_来强调字段,所以真的不需要使用这个。r#也倾向于将它们重构掉……