這個
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
在那裡不能省略。