这个
this
关键字引用类(对象)的当前实例。这样,可以区分具有相同名称的两个变量,一个在类级别(一个字段),一个是方法的参数(或局部变量)。
public MyClass {
int a;
void set_a(int a)
{
//this.a refers to the variable defined outside of the method,
//while a refers to the passed parameter.
this.a = a;
}
}
关键字的其他用法是链接非静态构造函数重载 :
public MyClass(int arg) : this(arg, null)
{
}
和编写索引器 :
public string this[int idx1, string idx2]
{
get { /* ... */ }
set { /* ... */ }
}
并声明扩展方法 :
public static int Count<TItem>(this IEnumerable<TItem> source)
{
// ...
}
如果没有与局部变量或参数冲突,那么是否使用 this
是一种风格问题,因此 this.MemberOfType
和 MemberOfType
在这种情况下是等效的。另见 base
关键字。
请注意,如果要在当前实例上调用扩展方法,则需要 this
。例如,如果你在一个实现 IEnumerable<>
的类的非静态方法中,并且你想从之前调用扩展名 Count
,你必须使用:
this.Count() // works like StaticClassForExtensionMethod.Count(this)
和 this
在那里不能省略。