C#中的命名约定是什么?

47

有几个问题与此相关,但它们似乎都针对语言的特定部分;

我和朋友一起开始使用C#创建XBOX Live Arcade游戏的冒险。我已经使用ActionScript 2和3开发了许多游戏,但想开始探索更强大的语言和设备。

我希望确保在与人合作时(如果我能做到这一点)或者当我遇到问题并询问具有严重干扰/“不正确”方法命名等的问题时,不会惹恼别人。

我发现在我看到的示例代码中很令人困惑,因为从我的当前观点来看存在一些缺陷。我怀疑会使用有缺陷的命名约定,因此我意识到我只是难以理解。

就我目前所知,有以下约定:

  • public Type SomeMethod() - 公共方法,返回Type类型
  • private Type SomeMethod() - 没有下划线或其他任何符号的私有方法,返回Type类型
  • public static Type SomeMethod() - 公共静态方法,返回Type类型
  • private static Type _SomeMethod() - 这个看起来有点奇怪的私有静态方法,返回Type类型
  • public Type someProperty - 属性采用驼峰命名法?
  • public static Type SomeProperty - 静态属性采用帕斯卡命名法?

在ActionScript 3中,我已经制定并严格遵守这些惯例:

  • private var _someVar
  • public var someVar
  • private function _someMethod()
  • public function someMethod()
  • public static var SomeStaticVar
  • public static function SomeStaticMethod()
  • public const SOME_CONSTANT

是否有一个完整的命名惯例列表,并解释每个惯例的原因,以便我可以理解它们?语法的反转(即public Type method()而不是AS3的public function method():Type)已经让我感到困惑,我知道我需要关注如何命名事物,否则我会忘记并养成不良习惯,我宁愿现在掌握它们并避免。


我不认为有一个单一的规范——我倾向于看到不同编码人员使用各种不同的风格。我认为最重要的是在整个代码中保持一致性。选择一个规范并坚持它。 - Sean Thoman
一些微软的指南:http://msdn.microsoft.com/en-us/library/ms229045.aspx 和我发现有用的一些备忘单:http://csharpguidelines.codeplex.com - Otiel
4个回答

58

两种主要的大小写命名方式分别为camelCase和PascalCase。

基本规则(有很多变化)是:

  • 类型使用PascalCase
  • 属性和方法始终使用PascalCase
  • 公共成员(字段,常量)使用PascalCase
  • 局部变量使用camelCase
  • 参数使用camelCase

尽管文档规定了"内部和私有字段不包含指导方针",但是有一些明确的惯例:

  • 私有字段使用camelCase
  • 用于支持属性的私有字段前缀是_

1
@ Henk. 那么受保护的和静态字段呢? - Ranadheer Reddy
4
在微软的命名规范中,禁止使用 _ 符号。 - Yoda
1
@Yoda - 什么版本/年份?当 Fx 1 推出时,微软坚持这一点,但几年后,备用字段通常会加上前缀。 - H H
1
@Mike,以及在Type Members的相邻页面上:“内部和私有字段不受指南的覆盖”。我的回答是针对我在实践中看到的使用情况。 - H H
2
@Trisped 尽管如此,微软仍然在他们自己的代码示例中使用它们。 - Mike Lowery
显示剩余3条评论

17

微软提供了All-In-One Code Framework Coding Standards,其中包含完整的规则和指南。(以前也可以在这里找到)

本文档描述了Microsoft All-In-One Code Framework项目团队用于本机C++和.NET(C#和VB.NET)编程的编码风格指南。


必须为Scribd付费。 - rollsch
1
@rolls 你可以免费在Scribd或Codeplex上查看该文档。如果你想下载它,请使用Codeplex链接。 - Nasreddine
谢谢,我刚刚发现这个。 - rollsch
@Nasreddine Codeplex已经关闭,链接不再可用。 - reducing activity

7
微软为 .Net 编程提倡了许多命名规范。您可以在此处阅读这些规范:http://msdn.microsoft.com/en-us/library/ms229002.aspx
一般来说,对于公共属性、方法和类型名称,请使用 PascalCase。
对于参数和局部变量,请使用 camelCase。
对于私有字段,请选择以下之一:有些人使用 camelCase,其他人用 _camelCase 前缀加上 _。
常见的约定还包括使用 ALLCAPS 命名常量。

1
我猜全大写的约定是起源于C语言旧编码风格的遗留物。这绝对不是你在标准.NET常量或枚举中找到的东西。 - Palec
我在C#中对枚举和常量使用全大写,因为大多数时候我会与Interop C++ DLL一起使用它们。 - rollsch

4
C#偏爱使用PascalCasing来命名类,属性和方法。
就目前而言,有以下约定:
- public Type SomeMethod() <-- 是的 - private Type SomeMethod() <-- 正确,不要加下划线 - public static Type SomeMethod() <-- 正确 - private static Type _SomeMethod() <-- 这对我来说似乎很奇怪。下划线不应该在这里 - public Type someProperty <-- 不是,公共属性应该是PascalCased(SomeProperty) - public static Type SomeProperty - 然后再回到pascal casing静态..
如果您正在使用Visual Studio或XNA Game Studio(我认为它是Visual Studio的一个分支),我强烈建议购买ReSharper许可证(来自jetbrains software)。他们将在您的代码编辑器中告诉您如何符合常见的C#约定。
补充:
私有字段和方法参数应使用camelCasing。对于私有字段,我通常会在它们之前添加_下划线。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接