是否有命名规则来定义's'附加到函数名后

本文关键字:函数 定义 是否 规则 | 更新日期: 2023-09-27 17:54:51

作为一个很好的例子来说明这个问题。让我们看看这个系统。对象包含:

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

那么,在最佳实践中,我们可以遵循什么时候应该在函数名称的末尾添加's'的一般规则吗?

//更新//

为什么不使用 finalize MemberwiseClones来代替呢?

是否有命名规则来定义's'附加到函数名后

不幸的是,这只是遵循英语语言的变幻莫测,这对于非母语人士来说是非常难以掌握的。

意思是:

  • a.Equals(b)应该是"A = b"当主语是单数时(如"A"),"Equals"是及物动词"to equal"的适当变化形式。
  • a.GetHashCode()应该读取"a点GetHashCode",因为您计划从变量a表示的对象中"获取哈希码"。
  • a.Finalize()应该读为"a点Finalize",表示您打算"Finalize"变量a所代表的对象。

其他添加"s"的例子通常遵循单复数规则。例如:

  • type.GetCustomAttributes()表示将返回"属性"的集合,而不仅仅是单个"属性"。"

正如其他人提到的,这是英语语言的一个细微差别…我会说经验法则是,如果它返回bool,那么以's'结尾是合适的。它几乎就像DoesXXX的缩写(DoesEqual => Equals, DoesReferenceEqual => ReferenceEquals)。对于属性,惯例是以IsXXX (IsEmpty, IsEnum,等等…)作为属性名的开头。

我似乎找不到任何参考你的问题的东西,但是以S结尾的函数是用作动词的。因此,如果按字面意思读-

对象。等于什么?或者1(一个对象)+ 1(一个对象)= 2(一个对象)

给我Object.GetHashCode

Equals更具描述性。如果我要使用Equal,那么我可能会把它改成IsEqual但是Equals更短,所以它被使用了

我认为没有,

Equals(object,object);

只是比

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

Equals可以看作是"IsEqualTo"的缩写形式。使用它的主要区别是复数和单数。例如,GetType意味着单数用法,并且返回一种类型。GetTypes意味着复数用法,并且会返回多个类型(如数组、集合等)。

当方法名的最后一个英文单词中有一个'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,或者断言对象完成了Finalize。另一方面,Finalize()更像是您发送给对象的命令:"you !对象!是的,你!…去完成你自己吧!"

MemberwiseClone()的情况下,这是因为只返回一个Clone。由于Clone是名词,这意味着克隆意味着不止一个克隆。