2012-10-08 78 views
0

我正在爲我的C#項目使用Resharper。'this'關鍵字冗餘

我已經創建了一些私有全局變量,通常我使用'this'關鍵字作爲變量名稱的前綴(例如this.FirstName)。

Resharper顯然希望我使用下劃線而不是'this',但實際上足夠大膽以表明'this'關鍵字是多餘的。在MSDN網站上沒有提到這一點;我的印象是,無論使用什麼命名約定(使用_或這個或大寫/小寫),它最終都是由用戶選擇的(即使MSDN站點將它混合了一點(儘管從未在同一個範圍內類))。

任何人都可以澄清,如果他們聽說過這樣的事情,或者如果你覺得多餘的評論只是Resharper的觀點,因爲這種說法似乎有些荒謬。

+1

這個問題的所有答案都是一個意見。沒有「正確的」答案。我建議在http://programmers.stackexchange.com/上詢問這個問題,它有更多的討論類型問題。 –

+1

通過「冗餘」它只是意味着「在這種情況下不需要*」,又名*可選和不必要* ...它不是關於「足夠大膽」。只有*嚴格要求*如果它在那裏改變了意思。 –

+0

是的,對不起,我對冗餘和貶損這個詞感到困惑! – Dave

回答

9

「冗餘」意味着不必要。由於在這些情況下關鍵字顯然不是編譯器所必需的,因此ReSharper是正確的。

是否有文體異議是另一回事。我確信ReSharper可以配置爲忽略這些用途,如果這更適合你。

1

作爲解釋,this關鍵字在人類讀取代碼以及私人訪問修飾符時最爲有用。但它並不是絕對必要的,因爲它知道你指的是什麼字段,並且如果沒有指定訪問修飾符,它就知道隱含是私有的。

+1

實際上,情況正好相反,在編譯時將「this'添加到*缺失的位置(或者發出不同的加載/調用語句)是更正確的。 –

+1

我從來沒有在IL代碼中看到與此關鍵字等效的東西,反編譯器可以隨意添加它們,儘管如果你有一些引用,我錯了,請分享。 – Freeman

+1

就像我在評論中所說的,IL代碼中沒有明確的'this'關鍵字,但是成員變量/方法的處理方式與其他方式不同。重要的一點是,與你的回答所說的相反,如果不在C#源代碼級別上,IL級別上的差異很重要。 –

1

我個人同意ReSharper的,是編碼風格我使用:用this關鍵字

public class Foo 
{ 
    private readonly string _bar; 
    public Foo(string bar) 
    { 
     _bar = bar; 
    } 
} 

,前綴領域當然是個人選擇的問題。

1

請原諒我,如果我完全誤解了你的帖子,但是我讀到它後的第一反應是你可能不清楚在C#中使用「this」關鍵字。看起來,使用類名成員名稱的術語與隱含關鍵字「this」的作用域分辨率之間存在着模糊的區別。

在運行時,「this」始終引用當前對象實例。許多開發人員使用下劃線前綴來指示類成員變量作爲編碼風格的問題。

+0

對不起 - 錯誤是我混淆冗餘字和折舊! – Dave

4

其他的答案已經解釋得很好,有一點補充:this可以派上用場,有時:

public class User 
{ 
    private string firstname; 

    public User(string firstname) 
    { 
     this.firstname = firstname; 
    } 
} 

this這裏需要,所以它知道你指的是哪一個,因爲它們被命名爲相同。

除此之外,這是個人偏好,大多數情況下它是多餘的,但是如果您認爲這是值得的,您可以將其從Resharper的警告中刪除。它將在選項中的代碼編輯下以及代碼清理配置文件中,如果您使用的是Stylecop插件。