2010-11-19 87 views
2

b/w以下兩個代碼有什麼不同?在構造函數中使用'this'關鍵字有什麼用處。在構造函數中使用'this'關鍵字

例1:

public Product(string name){ 
this.Name = name; 
} 

出2:

public Product(string name){ 
Name = name; 
} 

我知道這是指調用對象。只是我無法獲得差異?

有人可以解釋一下嗎?

+0

「要獲得通過的成員相似的名字隱藏」不太明顯的不那麼明顯。它在這裏解釋:http://msdn.microsoft.com/en-gb/library/dk1507sz(v=vs.90).aspx – Saturnix 2013-09-06 09:05:40

回答

6

示例1使用對this的明確引用。這並不是真的需要,因爲在這種情況下不存在歧義。如果該參數改爲Name,則需要顯式this來解決不明確性。

2

就發射IL而言絕對沒有差異。這只是爲了可讀性。當你使用this你更明確。

4

在您提供的示例中,它是絕對可選的。

它主要隱含地告訴用戶與之合作的成員是當前類對象的一部分。

的一個做法是,以區別於成員或字段的參數如下所示:

public class Customer { 
    private string name; 

    public Customer(string name) { 
     this.name = name; 
    } 
} 

爲了增強可讀性的緣故,一會就把thisname字段前要清楚的是,name參數的值被分配到這個類'name字段。

在這種情況下,它是必要的,因爲構造函數參數和字段都具有相同的名稱。否則,如果它們是不同的變量名稱,則this關鍵字將是可選的。

+0

在這裏給出的例子中,「this」是* not * optional - 代碼具有和不具有「this」的不同含義。 – razlebe 2010-11-19 18:01:46

+0

第二個「this」在此特定示例中不是可選的。 – 2010-11-19 18:13:41

+0

我公開了一種情況,它確實不是可選的,而這正是我想告訴OP的。用不同的名稱(字段和構造函數參數),'this'就成爲可選項。我沒有得到降價... – 2010-11-19 18:23:06

1

this.NameName更明確。使用this可以讓代碼更加明顯。但在這種情況下,編譯器將以相同的方式解釋它們。

3

在這種情況下,沒有區別。爲是明確的更常見的原因是這樣的:

public Product(string name){ 
    this.name = name; 
} 

在這一點上this是絕對需要的,否則它會從參數無操作分配本身(這將引發警告,IIRC )。

0

這是一個風格問題。像其他人所說的那樣,在IL中沒有區別。就個人而言,我喜歡在訪問課程成員時使用this.前綴。實際上,默認的StyleCop規則需要它。它只是明確了成員來自哪裏。

1

我不同意這裏的其他人說使用「這個」更明確。最肯定的是而不是。在你給出的例子中,屬性「Name」與其得到的一樣明確。如果我們有另一個字母比「this」更多的字母,它就不會更明確。

Name 

this.Name 

這也不外乎以下廢話

thisIsNotAKeyWordButItMeansThis.Name 
相關問題