C#的Pascal套管方法名称背后的原理/原因是什么?


22

我刚刚开始学习C#。来自Java,C ++和Objective-C的背景知识,我发现C#的Pascal框其方法名称相当独特,并且一开始很难适应。这背后的原因和哲学是什么?

我猜这是因为C#属性。与Objective-C中的方法名可以与实例变量完全相同的情况不同,C#并非如此。我猜想属性(与支持它的大多数语言一样)的目标之一是使属性与变量和方法真正区分开。因此,在C#中可以有一个“ int x”,并且相应的属性变为X。为了确保属性和方法是不可区分的,因此,我猜测的所有方法名称也应以大写字母开头。(这只是基于目前为止我对C#的了解而得出的假设,我仍在学习中)。我很好奇这个好奇的指南是如何产生的(鉴于它是

(编辑:通过Pascal-casing,我的意思是PascalCase(基本上是camelCase,但以大写字母开头)。在大多数语言中,方法名称通常以小写字母开头)


如果您看到某个家庭的所有成员在其所有房屋的墙壁上都涂有奇怪的徽章,您是否会好奇他们为什么这样做如此奇怪?
夜曲

1
您为什么认为这叫做Pascal案?
R. Martinho Fernandes

1
@Martinho Fernandes,这是这种风格的标准名称,请查看Google
Andrey

1
@夜曲-是的。我会很好奇:)
乔尔·埃瑟顿

1
根据我的经验,“在大多数语言中,方法名称都以小写字母开头”。以大写字母开头(带或不带下划线)的约定非常普遍,尽管官方语言指南中不一定如此。大多数语言标准都没有任何单一的官方样式指南。相当多的语言(主要是较老的语言)无论如何都会忽略大小写,并且通常都采用小写形式,因为“不按移位”是最懒的规则,这意味着您不会将混用大小写不同的拼写视为相同的混淆。
Steve314 2011年

Answers:


27

这是口味问题。曾经有人决定使用Pascal样式来命名,这成为一种标准。

我有一个很大的猜测,那就是安德斯·赫斯伯格Anders Hejlsberg),他是帕斯卡(Pascal)的继任者德尔斐(Delphi)的建筑师。案例样式与C#中的样式相同。


这将是我的答案。:P
DevSolo 2011年

@DevSolo抱歉,当问题在Stackoverflow时,我开始输入答案:)
Andrey

我认为其根源可以
追溯到

20

如果您要问原因,这是从马口中直截了当的:

MSDN博客上Brad Abrams撰写的有关Pascal套管和骆驼套管的历史

在框架的初始设计中,我们就命名风格进行了数百小时的辩论。为了促进这些辩论,我们创造了许多术语。设计团队的关键成员是Anders Heilsberg(Turbo Pascal的原始设计师),因此毫无疑问,我们为Pascal编程语言所流行的套管样式选择了Pascal Casing这个术语。

Pascal Casing约定将每个单词的第一个字符大写(包括长度超过两个字母的首字母缩写)...

这里是设计准则:类库开发人员的设计准则

这些准则旨在帮助班级库设计人员了解不同解决方案之间的权衡。在某些情况下,良好的库设计要求您违反这些设计准则。这种情况很少见,重要的是要为您的决定提供扎实的理由。本节提供.NET Framework中类型的命名和使用准则,以及实现常见设计模式的准则...


2
TurboPascalPhilip Kahn(aka Borland)的宝贝,这对于Microsoft来说很方便。政治....
davka

1
第一个链接上的评论很棒,哈哈。
2011年


2

我认为背后没有特定的哲学。需要制定指导方针,并且有很多方面可能会影响它:

  • 他们想摆脱任何前缀符号(在此处阅读匈牙利语)
  • 他们希望仅通过阅读姓名来区分本地/私人成员和公共成员。
  • 他们不希望C#代码看起来像Java代码(大量使用驼峰式大小写)

请注意,此命名指南适用于.NET框架,尤其不适用于C#。在不区分大小写的语言VB.NET中,约定保持不变,但是您不能使用它按大小写区分私人成员和公共成员。
R. Martinho Fernandes

@Martinho:同意。但是我仍然觉得那是原因之一。
飓风2011年

7
+1:“他们不希望C#代码看起来像Java代码(大量使用驼峰大小写)”:我强烈怀疑您就在这里!
Giorgio

具有讽刺意味的是,尽管有些人讨厌匈牙利表示法,但如果Java和C#采用Apps Hungarian(或其他命名约定)来区分“拥有”可变对象的引用类型字段,那么它们在实践中可能都是更好的语言。这样就可以识别出那些必须永远不会被突变的可变类型实例,等等。即使运行时不在乎这样的区别,也不可能编写出高效而正确的代码,而又不知道哪些变量属于哪种类型。
2014年

0

我不知道该框后面有一个“哲学”,它很好而且很紧凑,可以很容易地显示为多个单词而无需使用下划线。

在过去的几十年中,套管有很多变化。它们的范围从非常简洁(请参阅C和标准C库)到冗长的下划线将每个单词分开。虽然.NET库的命名约定仍然很冗长,但我认为它在某些方面占据了中间位置。


5
不要忘了lisp风格的命名!
R. Martinho Fernandes

@Martinho Fernandes实际上在类似C语言的上下文中无效。
安德烈(Andrey)

是的,Lisp考虑了空格。(- var1 var2)
Michael K

@Martinho Fernandes:当然,这需要使用空格来分隔令牌。它也是COBOL-STYLE-NAMING,这使它成为我最欣赏和最不欣赏的语言的共同点。
David Thornley

0

大胆猜测(恕我直言,但并非不合理)-C#设计由Pascal的原始发明者Niklaus Wirth监督。看到连接了吗?... :)

好奇#1:我肯定记得.NET和C#的发布(是的,我是史前的……),以及Microsoft如何通过在C#中使用Wirth的名字来吹嘘。但是,在C#和Wirth上的Wikipedia页面上都没有提到这一点。

好奇#2:尽管它被称为PascalCase,但它是由TurboPascal编译器(最终成为Borland)而不是语言本身进行了普及。


4
和TurboPascal是由Anders Hejlsberg方便地设计和建造的
SWeko 2011年

3
Anders Hejlsberg是IIRC的Delphi首席设计师,并且在Turbo Pascal上工作很多,但是Turbo Pascal最初不是他的孩子(是Philip Kahns)。Niklaus Wirth发明了最初的 Pascal,并通过了标准化,然后看到该标准在很大程度上被忽略了。同样,Wirth在C#的整个生命中都已经退休,在此之前,他设计了几种Pascal继承语言(最近是Oberon 2),所以我怀疑他是否直接参与了。微软大声疾呼说要让海斯伯格加入。Turbo Pascal从一开始就是Borland的产品。
Steve314

我不介意降级-我在StackOverflow上有足够的积分,但我对此感到好奇
-davka 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.