C#類別中this關鍵字的必要性
在初學物件導向的時候,我就一直在懷疑this的必要性,因為對我來說無論如何這都是一個可以省略的關鍵字,大部份的時刻我一直都不需要它的,甚至有時候有人猛然問我為何要寫this,我一時之間還是答不太上來說(笑)。其實,this是必要的,只是長時間以來我的書寫習慣讓我不需要太重度依存這個關鍵字,所以我還是把為何需要this的原因寫在下方吧,提供給跟我一樣有當年困惑的你瞭解一下。
this表示這個物件實體本身,在多數的情況下,它根本是廢話,因為類別實體方法(Methods)中,本來就可以有完整權限存取類別自己定義的欄位(Fields),那又何需加上this?原因如下列程式碼,你看了就會心神領會。
class Program
{
private string id;
public string setName(string id)
{
this.id = id;
return this.id;
}
static void Main()
{
Program obj = new Program();
Console.Write(obj.setName("John"));
}
}
由上述的程式碼我們可以知道,當你的欄位跟你方法中的參數同名時,這就是困擾的根源,也就是this的使用時機。不然你永遠無法達成讓編譯器完成「id = id」的狀況。問題其實到這邊就解答完了,那麼另外的問題是,為何我的書寫習慣幾乎不會用到this呢?以下是我習慣的寫法:(當然啦,這只是範例,以這個例子真正在實作上只要用自動屬性實作一行就解決了。)
class Program
{
private string _cId; //私有變數加底線
//參數的設計我會加上Temp,因為它本身就有暫時性的味道
public string setName(string cTempId)
{
_cId = cTempId;
return _cId;
}
static void Main()
{
Program obj = new Program();
Console.Write(obj.setName("John"));
}
}
延伸閱讀: