是否有命名规则来定义何时将's'附加到函数名称?

时间:2011-05-05 16:28:57

标签: c#

作为一个很好的例子来说明这个问题。让我们看看System.Object如何包含:

Equals                => with 's'
GetHashCode
GetType
ReferenceEquals       => with 's'  
ToString
Finalize
MemberwiseClone

那么,当我们在函数名的末尾附加一个's'时,我们可以遵循最佳实践中的一般规则吗?

// updated //

为什么不使用 Finalizes MemberwiseClones

6 个答案:

答案 0 :(得分:7)

不幸的是,这恰好跟随英语的变幻莫测,这对于非母语人士来说很难掌握。

这个想法是:

  • a.Equals(b)应为“A等于B”。当主语是单数(如“A”)时,“等于”是及物动词“相等”的正确结合。
  • a.GetHashCode()应为“a getHashCode”,因为您计划从变量a表示的对象中“获取哈希码”。
  • a.Finalize()应为“a dot Finalize”,这意味着您计划“完成”变量a所代表的对象。

添加“s”的其他示例通常遵循单数对复数规则。例如:

  • type.GetCustomAttributes()表示会返回一系列“属性”,而不只是一个“属性”。

答案 1 :(得分:1)

正如其他人所提到的,这是英语的细微差别......我会说经验法则是,如果它返回bool,那么以's'结尾是合适的。这几乎就像是对DOXXX的缩短(DoesEqual => Equals,DoesReferenceEqual => ReferenceEquals)。对于属性,约定是使用IsXXX(IsEmpty,IsEnum等)启动属性名称。

答案 2 :(得分:0)

我似乎找不到任何可以引用你的问题的东西,但最后带有S的函数被用作动词。所以,如果按字面意思读 -

Object.Equals有什么用?或1(对象)+ 1(对象)是否等于2(对象)。

给我Object.GetHashCode。

等于更具描述性。如果我使用Equal,那么我可能会将其更改为IsEqual但Equals更短,因此使用它。

答案 3 :(得分:0)

我不认为有一个,

Equals(object,object);

更具描述性
Equal(object,object);

答案 4 :(得分:0)

等于可以被视为“IsEqualTo”的缩写形式。使用它的主要区别是复数与单数。例如,GetType意味着单一用法,并返回一种类型。 GetTypes意味着多次使用,并且将返回多种类型(作为数组,集合等)。

答案 5 :(得分:0)

当方法名称在英文的最后一个单词中有's'时,你附加一个's'。

一般来说,你想要使用第三人称现在时态动词,然后根据需要使用单数或复数名词,并且你想尝试让你的代码几乎像英语一样阅读。因此:

bool areEqual = myObject.Equals(otherObject);     // set boolean value areEqual if myObject Equals otherObject
bool containsSomething = myObject.HasSomething(); // set boolean value containsSomething if myObject Has Something

string myStr = myObject.ToString();               // myStr is myObject [converted] To String

int hashCode = myObject.GetHashCode();            // Take myObject, Get [its] Hash Code, and store into integer variable hashCode

你越了解英语,它就越有意义。


为什么不使用Finalizes()?因为用英语表示对象正在进行终结,或者断言对象确实完成了某些事情。另一方面,Finalize()更像是你发送给对象的命令:“你!对象!是的,你!......自己去完成!”

对于MemberwiseClone(),这是因为只返回了一个克隆。由于克隆是一个名词,这意味着克隆将意味着不止一个克隆。