2010-05-28 71 views

回答

10

我的意見:使用this作爲消歧的目的,例如,當參數名稱與類屬性相沖突時,否則將它放在較小的噪音範圍內。

+0

當你修改代碼時(你通常會這樣做),你將不得不更新所有現在變成ambiguos或者不再有模糊的地方。現實告訴我們,你很可能不會這樣做,讓你的代碼處於不穩定的狀態 - 可讀性明智。 – bitbonk 2010-05-28 13:58:26

5

爲了可讀性和易理解性,每當調用實例成員時,都應該使用this.。它被認爲是最好的實踐和StyleCop suggests it too

(有了這個前綴)類的所有調用 成員(是)立即識別, 這無論編輯被 用來查看代碼。另一個優點是它創建了一個快速, 實例成員和靜態成員 之間的可識別區分,它們不加前綴。

使用'this。' 前綴的最後一個優點是鍵入此。會導致 Visual Studio顯示IntelliSense 彈出式窗口,使 開發人員可以快速輕鬆地選擇類別 成員進行調用。

換句話說,如果你省略了這個。前綴你不能很快理解,因此soemthing是一個靜態成員,一個局部變量,一個代表... 隨着前綴,你會看到它的第一次。

但最重要的是:無論您選擇什麼,您都應該在整個文件中以及所有其他文件中保持一致,並且也可以在整個團隊中保持一致!

+5

我完全不同意,認爲使用多餘,這個關鍵字只增加了噪音。 – spender 2010-05-28 13:28:12

+3

這取決於什麼更可讀,也許'這。'對你來說'更具可讀性*,但是*我*覺得它很混亂,並且會降低我對代碼的解析速度。你的回答使得這看起來絕對是絕對的,事實並非如此,也許每個程序員或每個團隊都是如此。 – 2010-05-28 13:28:15

+2

(根據我自己的回答)我同意這一個。在代碼可讀性方面,一致的冗長度比偶爾的低劣得多。 – Oli 2010-05-28 13:33:31

0

有效,如果你在使用相同名稱的範圍有一個以上的項目(例如一個實例變量和一個同名的局部變量)

在你所描述的情況下使用的 this關鍵字作爲消歧最有用
0

一個方式,你真正需要的是,當傳遞一個命名爲成員參數

在構造

MYCLASS(INT ID){ this.id = ID; }

1

當引用一個變量時,this.可以區分局部變量或參數和成員變量。但是當提到一種方法時,它並沒有提供任何有用的區別,因此,對我的思考方式,codejunk。丟開。

+0

它將實例方法與靜態方法(和委託)區分開來,當您的代碼庫同時包含這兩個方法時,這非常有用。 – 2010-05-28 13:49:18

+0

感謝您的更正,@Jeff;我不知道在C#中可以有同名的靜態和實例方法;我會認爲這是一個糟糕的做法 - 但我是一個爪哇人。我會更新答案。 – 2010-05-28 14:34:48

+0

對不起,我不清楚!我並不是說你可以在C#中使用相同名稱的靜態和實例方法(你不能),只需知道*在調用站點*是否有價值*你所調用的是靜態還是實例成員(或委託人)。 – 2010-05-28 14:37:47

2

到目前爲止,您已經得到了兩個不同意見的答案,所以我會將我的觀點作爲前Java,前C#以及現在最主要的Python程序員加入。在Python中,我們有self,幾乎完成相同的工作,只是它不是可選的。

我會說盡可能經常使用this。它不會改變任何東西,因爲當你從一個對象中調用它時它是隱含的,但它確實有助於區分,所以你知道你正在調用一個類成員(相對於全局函數)。

當你在一年的時間裏閱讀代碼時,你會感激你的。

0

我通常不會離開'這個'。在代碼中。但是,當我不記得這是什麼時,我確實將它用於智能感知目的。包含的內容。然後我刪除它。

但是你必須保留它的一個例子是限定類似名稱隱藏的成員。例如:

public Employee(string name, string alias) 
{ 
    this.name = name; 
    this.alias = alias; 
} 
1

如果調用不是模糊不清的,您不需要它,但我更喜歡使用它。在我看來,Bar僅僅通過foo.Property和foo.Method()來訪問Foo的屬性和方法,並且以this.Property和this.Method()訪問它自己的成員。你仍然在處理對象的屬性和方法,除了在this的情況下,你正在處理同一類中的成員。但爲什麼這件事在編碼風格上呢?我們一直使用this。它很乾淨,很清楚,並且一致。

0

有幾個人提到了使用this關於成員變量。我建議......

或者:

  • 前綴的成員變量與this.

或者:

  • 採用的成員變量的命名慣例,需要你他們的名字帶有_leadingUnderscore

Stylecop規則可以設置爲執行您的團隊喜歡的這些規則中的任何一個。

0

這指向當前對象,它基本上用於移除的用於例如

方法/變量名的模糊性

public class Test 
{ 
private string name; 
public Test(string name) 
{ 
this.name = name;//using this coz the parameter name and variable names are same 
} 
} 

你不需要總是使用它。

我希望它能幫助你。