在C#中this用來指代當前對象,用於當成員函數中的形參名跟成員變量名一致時,進行區分。
但this不僅僅只有這一作用,this還可以如下這樣用:
class class1
{
private int i_a;
private string s_a;
public class1()
{
i_a = 0;
s_a = "default";
}
public class1(int i_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
s_a = "defalt";
}
public class1(string s_a)
{
this.i_a = 0;
this.s_a = s_a;
}
public class1(int i_a, string s_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
this.s_a = s_a;
}
public void print()
{
Console.WriteLine("i_a = {0}", i_a);
Console.WriteLine("s_a = {0}", s_a);
}
}
注意到,這個對成員變量i_a的值的鑒定操作在第2跟第4個構造函數中重復了兩次,如果這個操作復雜一點,這樣的變量多一點,那重復代碼就大大增加,影響了代碼的維護性,一旦這個操作規則變化了,改動起來就比較麻煩,所以好的方法當然是將這個鑒定操作提取出來,放到一個單獨的函數中,然后統一調用,不過C#還提供了這樣一種機制來,如下:
class class1
{
private int i_a;
private string s_a;
public class1()
{
i_a = 0;
s_a = "default";
}
public class1(int i_a):this(i_a,"default"){}
public class1(string s_a):this(0,s_a){}
public class1(int i_a, string s_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
this.s_a = s_a;
}
public void print()
{
Console.WriteLine("i_a = {0}", i_a);
Console.WriteLine("s_a = {0}", s_a);
}
}
另外,this還可以用在索引器中。
