是否有命名规则来定义's'附加到函数名后
本文关键字:函数 定义 是否 规则 | 更新日期: 2023-09-27 17:54:51
作为一个很好的例子来说明这个问题。让我们看看这个系统。对象包含:
Equals => with 's'
GetHashCode
GetType
ReferenceEquals => with 's'
ToString
Finalize
MemberwiseClone
那么,在最佳实践中,我们可以遵循什么时候应该在函数名称的末尾添加's'的一般规则吗?
//更新//
为什么不使用 finalize 或MemberwiseClones来代替呢?
不幸的是,这只是遵循英语语言的变幻莫测,这对于非母语人士来说是非常难以掌握的。
意思是:
-
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是名词,这意味着克隆意味着不止一个克隆。