關鍵字this有兩種基本的用法,一是用來進行this訪問,二是在聲明構造函數時指定需要先執行的構造函數。
this訪問在類的實例構造函數和實例函數成員中,關鍵字this表示當前的類實例或者對象的引用。this不能用在靜態構造函數和靜態函數成員中,也不能在其他地方使用。
當在實例構造函數或方法內使用了與字段名相同的變量名或參數名時,可以使用this來區別字段和變量或者參數。下面的代碼演示了this的用法。
public class Dog
{
public string name;
public int age;
public Dog()
{
}
public Dog(string name) // 在這個函數內,name是指傳入的參數name
{
this.name = name; // this.name表示字段name
}
public Dog(string name, int age) // 在這個函數內,name是指傳入的參數name
{ // age是指傳入的參數age
this.name = name; // this.name表示字段name
this.age = age; // this.age表示字段age
}
}
實際上,this被定義為一個常量,因此,雖然在類的實例構造函數和實例函數成員中,this可以用於引用該函數成員調用所涉及的實例,但是不能對this本身賦值或者改變this的值。比如,this++,--this之類的操作都是非法的。
this用於構造函數聲明可以使用如下的形式來聲明實例構造函數:
『訪問修飾符』【類名】(『形式參數表』) : this(『實際參數表』)
{
【語句塊】
}
其中的this表示該類本身所聲明的、形式參數表與『實際參數表』最匹配的另一個實例構造函數,這個構造函數會在執行正在聲明的構造函數之前執行。
比如:
// ThisAndConstructor.cs
// 關鍵字this用於聲明構造函數
using System;
class A
{
public A(int n)
{
Console.WriteLine("A.A(int n)");
}
public A(string s, int n) : this(0)
{
Console.WriteLine("A.A(string s, int n)");
}
}
class Test
{
static void Main()
{
A a = new A("A Class", 1);
}
}
將輸出:
A.A(int n)
A.A(string s, int n)
這說明,執行構造函數A(string s, int n)之前先執行了構造函數A(int n)。