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"));
  }
}

延伸閱讀:

屬性Property與欄位Field,傻傻分不清楚

Visual Studio中的產生方法Stub

物件導向 類別 ObjectOriented Class WhyNeed This Keyword