有人可以向我解释C#的编码约定吗?


14

我最近开始使用Unity3D,主要是使用C#编写脚本。正如我通常使用Java编程一样,两者之间的差异并不是很大,但是我仍然提到速成课程,只是为了确保自己走上正确的道路。

但是,我对C#的最大好奇是它使用了其方法名称的首字母大写(例如Java:getPrime()C#:GetPrime()aka:Pascal Case?)。是否有充分的理由呢?我从速成课程页面上了解到,我读到的显然是.Net的约定,我无法更改它,但是我很好奇,为什么听到这样的结果而不是正常的(相对的)骆驼案呢?例如Java使用的

注意:我了解语言具有自己的编码约定(Python方法都是小写字母,这也适用于此问题),但是我从来没有真正理解过为什么它没有被正规化为标准。


18
我真的不认为你可以看看camelCasePascalCaseunderscore_case和说,其中一人是正常的(甚至是比较正常的),其他没有。正如@dasblinkenlight所说,这是一个任意选择。使您认为C#的常规与众不同的唯一原因是您“通常使用Java编程”,因此习惯了为Java做出的任意选择。
Carson63000

请改用JavaScript .. for Unity3D :)
Lipis 2012年

@Lipis为什么要-除了个人品味?;-)
ahodder 2012年

@AedonEtLIRA完全是个人..没关系:)不管使用哪种语言,都请享受Unity ..您最终会使用..
Lipis 2012年

@Lipis到目前为止很好。大量的钟声和口哨声,我还没有投入。但是我确实更喜欢C#(c / c ++)和Java的结构化样式。
ahodder 2012年

Answers:


27

命名约定代表发布者的任意选择。语言本身并没有禁止您使用Java命名方法的方法:只要第一个字符是字母/下划线,而所有其他字符是字母,数字或下划线,则C#不会抱怨。但是,.NET附带的类库遵循Microsoft内部采用的约定。微软还发布了这些指南,以便其他人也可以选择将其用于自己的类库。尽管可以选择遵循或忽略Microsoft的准则,但是如果您遵循相同的命名准则,则其他人对您的代码的熟悉可能会更快。


但是,惯例背后通常有一些基本原理,当我读到“这样做有充分的理由吗?”时,我将其理解为关于为什么不是什么的问题。
greenoldman

公共/内部/静态成员以及所有方法的Pascal。私人骆驼。它有助于在您扫描令牌时区分令牌的范围。该this关键字不相同。样式选择是实用的,即使它们看起来可能很陌生
Gusdor


4

除了给出的其他答案外,使用方法的驼峰大小写意味着它们可能与使用骆驼式大小写命名的私有成员的名称,参数和方法变量发生冲突。在Java(和C#1.0)中,这并不十分常见,因为委托使用很尴尬且很少见。在现代C#中,这不是很普遍,但也不是闻所未闻的。


1
下划线不应在C#私有字段中使用(例如,请参见blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx),但这引起争议并且经常被发现。
詹斯2012年

1
不管语言是否允许,依靠大小写来区分语言构造都是一个非常糟糕的主意。
gbjbaanb 2012年

4
@Telastyn的声明令人震惊。大多数.NET类库都使用该约定。
MattDavey 2012年

1
@Dunk 我的约定突然怎么样了?我只是通过评论,对这件事我都没有意见:)
MattDavey

2
@MarjanVenema:不确定您在说什么,但是C#区分大小写,并且在相同大小写的成员之间肯定会发生冲突。当您在库级别使用诸如VB.NET的不区分大小写的实际语言时,这将变得有趣而令人兴奋。
Wyatt Barnett
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.