可能重複:
Why does StyleCop recommend prefixing method or property calls with 「this」?
When do you use the 「this」 keyword?何時使用this.method()?
嗨SO,快樂星期五 我有關於使用this.method的()問題;.我的代碼似乎沒有使用這個工作,但我包括它,因爲它似乎是正確的事情。什麼時候應該這樣使用,而且因爲它的存在並不總是有所作爲,所以.this的最佳實踐是什麼?
可能重複:
Why does StyleCop recommend prefixing method or property calls with 「this」?
When do you use the 「this」 keyword?何時使用this.method()?
嗨SO,快樂星期五 我有關於使用this.method的()問題;.我的代碼似乎沒有使用這個工作,但我包括它,因爲它似乎是正確的事情。什麼時候應該這樣使用,而且因爲它的存在並不總是有所作爲,所以.this的最佳實踐是什麼?
我的意見:使用this
作爲消歧的目的,例如,當參數名稱與類屬性相沖突時,否則將它放在較小的噪音範圍內。
爲了可讀性和易理解性,每當調用實例成員時,都應該使用this.
。它被認爲是最好的實踐和StyleCop suggests it too:
(有了這個前綴)類的所有調用 成員(是)立即識別, 這無論編輯被 用來查看代碼。另一個優點是它創建了一個快速, 實例成員和靜態成員 之間的可識別區分,它們不加前綴。
使用'this。' 前綴的最後一個優點是鍵入此。會導致 Visual Studio顯示IntelliSense 彈出式窗口,使 開發人員可以快速輕鬆地選擇類別 成員進行調用。
換句話說,如果你省略了這個。前綴你不能很快理解,因此soemthing是一個靜態成員,一個局部變量,一個代表... 隨着前綴,你會看到它的第一次。
但最重要的是:無論您選擇什麼,您都應該在整個文件中以及所有其他文件中保持一致,並且也可以在整個團隊中保持一致!
有效,如果你在使用相同名稱的範圍有一個以上的項目(例如一個實例變量和一個同名的局部變量)
在你所描述的情況下使用的this
關鍵字作爲消歧最有用
一個方式,你真正需要的是,當傳遞一個命名爲成員參數
在構造
MYCLASS(INT ID){ this.id = ID; }
當引用一個變量時,this.
可以區分局部變量或參數和成員變量。但是當提到一種方法時,它並沒有提供任何有用的區別,因此,對我的思考方式,codejunk。丟開。
它將實例方法與靜態方法(和委託)區分開來,當您的代碼庫同時包含這兩個方法時,這非常有用。 – 2010-05-28 13:49:18
感謝您的更正,@Jeff;我不知道在C#中可以有同名的靜態和實例方法;我會認爲這是一個糟糕的做法 - 但我是一個爪哇人。我會更新答案。 – 2010-05-28 14:34:48
對不起,我不清楚!我並不是說你可以在C#中使用相同名稱的靜態和實例方法(你不能),只需知道*在調用站點*是否有價值*你所調用的是靜態還是實例成員(或委託人)。 – 2010-05-28 14:37:47
到目前爲止,您已經得到了兩個不同意見的答案,所以我會將我的觀點作爲前Java,前C#以及現在最主要的Python程序員加入。在Python中,我們有self
,幾乎完成相同的工作,只是它不是可選的。
我會說盡可能經常使用this
。它不會改變任何東西,因爲當你從一個對象中調用它時它是隱含的,但它確實有助於區分,所以你知道你正在調用一個類成員(相對於全局函數)。
當你在一年的時間裏閱讀代碼時,你會感激你的。
我通常不會離開'這個'。在代碼中。但是,當我不記得這是什麼時,我確實將它用於智能感知目的。包含的內容。然後我刪除它。
但是你必須保留它的一個例子是限定類似名稱隱藏的成員。例如:
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
如果調用不是模糊不清的,您不需要它,但我更喜歡使用它。在我看來,Bar僅僅通過foo.Property和foo.Method()來訪問Foo的屬性和方法,並且以this.Property和this.Method()訪問它自己的成員。你仍然在處理對象的屬性和方法,除了在this
的情況下,你正在處理同一類中的成員。但爲什麼這件事在編碼風格上呢?我們一直使用this
。它很乾淨,很清楚,並且一致。
有幾個人提到了使用this
關於成員變量。我建議......
或者:
this.
或者:
_leadingUnderscore
Stylecop規則可以設置爲執行您的團隊喜歡的這些規則中的任何一個。
這指向當前對象,它基本上用於移除的用於例如
方法/變量名的模糊性
public class Test
{
private string name;
public Test(string name)
{
this.name = name;//using this coz the parameter name and variable names are same
}
}
你不需要總是使用它。
我希望它能幫助你。
當你修改代碼時(你通常會這樣做),你將不得不更新所有現在變成ambiguos或者不再有模糊的地方。現實告訴我們,你很可能不會這樣做,讓你的代碼處於不穩定的狀態 - 可讀性明智。 – bitbonk 2010-05-28 13:58:26