这个

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.MemberOfTypeMemberOfType 在这种情况下是等效的。另见 base 关键字。

请注意,如果要在当前实例上调用扩展方法,则需要 this。例如,如果你在一个实现 IEnumerable<> 的类的非静态方法中,并且你想从之前调用扩展名 Count,你必须使用:

this.Count()  // works like StaticClassForExtensionMethod.Count(this)

this 在那里不能省略。