2014-01-30 156 views
0

我經常在指定我的方法時遇到困難。例如,現在我有一個比較兩個哈希值的靜態方法,並且我堅持使用它的名稱。 HashesEqual(string h1, string h2)AreHashesEqual(string h1, string h2)?你的更好的版本?這是一個通用的問題 - 我有很多這樣的東西。有沒有任何權威來源可以閱讀有關命名約定?平等方法 - 命名約定

+0

是的,有權威人士透露,在[MSDN]( http://msdn.microsoft.com/en-us/library/vstudio/ms229045%28v=vs.100%29.aspx)。不幸的是,尋求第三方資源通常是SO的主題。 –

回答

3

Names of Type Members MSDN上:

做給方法是動詞或動詞短語的名字。通常,方法對數據起作用,因此使用動詞來描述方法的動作可以使開發人員更容易理解該方法的作用。在定義該方法執行的操作時,請小心選擇一個能夠從開發人員角度提供清晰的名稱。不要選擇描述該方法如何做的動詞;換句話說,不要使用您的方法名稱的實現細節。

使用肯定語句(CanSeek而不是CantSeek)來命名布爾屬性。(可選)您也可以在Is,Can或Has的前面添加布爾屬性,但只能添加值。

我認爲其他人會同意,只要有意義,並且您一貫使用它,任何命名約定都是好的。


或者,請考慮爲提供此功能的string類創建擴展方法。然後,你可以簡單地做:

var equal = h1.EqualsHash(h2); // or similar, based on the naming you choose 

或者編寫自定義Hash類,內部保存的哈希值,並覆蓋/超載的Equals方法和==/!=運營商(S),讓位給這樣的:

var h1 = new Hash("string1"); 
var h2 = new Hash("string2"); 

var equal = h1 == h2; 
// or 
var equal = h1.Equals(h2); 

或者讓你的實用類獨立(如HashUtil或東西),並保持單詞「散」了它的方法(S)的全部:

var equal = HashUtil.AreEqual(h1, h2); 

另請參閱:Guidelines for Names

+0

因此,根據引用的第2部分,我的方法的通用名稱是'AreHashesEqual',開頭是'Are',我正確嗎? – Denis

+0

@Denis:我認爲這是可以接受的,是的。 –

1

我建議所有開發人員閱讀.NET Design Gudelines(鏈接是關於類型成員的具體部分)。在您的實例,因爲返回類型也是一個布爾值,我建議你嘗試類似:

IsHashEqual(string testHash) 
+0

而在我的方法有兩個參數的情況下,名稱必須是'AreHashesEqual',對吧? – Denis

1

.Net Framework Guidelines提供的唯一方法名稱的建議是,方法應該是

請給方法名稱是動詞或動詞短語

我認爲Are確實有資格作爲「動詞短語」,並會在這裏工作。

在這種情況下,儘管您沒有定義新的東西,而是定義良好的模式的特定形式:Equals。鑑於我的傾向將前綴等於功能,使其接近像智能感知,搜索等功能的Equals顯示出來......

EqualHashes(string p1, string p2)