平等方法 - 命名约定

时间:2014-01-30 22:28:55

标签: c# naming-conventions

我经常在指定我的方法时遇到困难。例如,现在我有一个比较两个哈希的静态方法,我坚持使用它的名字。 HashesEqual(string h1, string h2)AreHashesEqual(string h1, string h2)?你的版本更好?这是一般性的问题 - 我有很多这样的东西。是否有任何权威来源我可以阅读有关命名约定的内容?

3 个答案:

答案 0 :(得分:3)

来自MSDN上的Names of Type Members

  

确定方法名称是动词或动词短语。通常,方法对数据起作用,因此使用动词来描述方法的操作使开发人员更容易理解方法的作用。在定义方法执行的操作时,请注意从开发人员的角度选择一个提供清晰度的名称。不要选择一个动词来描述该方法的作用;换句话说,不要使用方法名称的实现细节。

     

使用肯定短语命名布尔属性(CanSeek而不是CantSeek)。或者,您也可以使用Is,Can或Has为布尔属性添加前缀,但仅限于添加值的位置。

我认为其他人会同意任何命名约定都是好的,只要它有意义并且你一直使用它。


或者,考虑为提供此功能的string类创建扩展方法。然后你可以简单地做:

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

或编写一个自定义Hash类,在内部保留散列值,并覆盖/重载其Equals方法和== / !=运算符,让步对此:

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

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

或者让您的实用工具类独立(例如HashUtil或其他东西),并将“哈希”一词完全保留在其方法之外:

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

另见:Guidelines for Names

答案 1 :(得分:1)

我建议所有开发人员阅读.NET Design Gudelines(链接是关于类型成员的特定部分)。在你的实例中,因为返回类型也是一个布尔值,我建议你尝试类似:

 IsHashEqual(string testHash)

答案 2 :(得分:1)

.Net Framework Guidelines提供的唯一方法名称建议是方法

  

请给出动词或动词短语的方法名称

我认为Are有资格作为“动词短语”并且可以在这里工作。

在这种情况下,虽然你没有定义新的东西,而是一个完善的模式的特定形式:等于。鉴于我的倾向是将函数作为Equals的前缀,以便它在Intellisense,Search等功能中显示接近等于......

EqualHashes(string p1, string p2)