2014-01-30 158 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)