【问题标题】:Naming guidelines with C#使用 C# 的命名准则
【发布时间】:2010-12-01 18:20:36
【问题描述】:

我有这门课:

class DoSomething
{
    private int timesDone;
    ...
}

命名变量“timesDone”的正确方法是什么?

有时我看到命名为 m_timesDone。它是否正确?在哪里可以找到有关命名准则的信息?

谢谢!

【问题讨论】:

  • m_、s_ 等根据 cedrou 指出的指南不鼓励公众成员使用。我不认为官方指南对私有领域有任何说明。我通常只将timesDone 用于私有字段,将TimesDone 用于公开属性。当我在构造函数中设置字段时,我调用参数timesDone 并将字段称为this.timesDone。我发现_timesDone 用于字段,timesDone 用于参数,TimesDone 用于属性也是可接受的组合。但这只是我的意见。你应该形成你自己的。 :)

标签: c# .net naming-conventions hungarian-notation


【解决方案1】:

您可以直接在 MSDN 网站上找到一些信息: http://msdn.microsoft.com/en-us/library/ms229002.aspx

【讨论】:

  • 当然,他们似乎没有为私有实例变量指定大小写约定:)
【解决方案2】:

没有普遍正确的方法。选择您喜欢的命名约定并坚持下去。

【讨论】:

  • 或者,更好的是,根据整个团队的喜好使用一个。标准应该是一个协作的努力,而不是一个人的命令——除非你是团队中唯一的人。
  • 我完全同意。此外,您应该四处寻找良好约定的示例,这样您就不必犯一些愚蠢的错误。
【解决方案3】:

很多人都按照你的方式去做。然后您将其引用为

this.timesDone = someInt

但是,我不喜欢这样,因为我不喜欢键入“this”以避免与方法参数名称发生冲突。只要它可读且一致,您就可以了。

【讨论】:

  • +1 - 谢谢!我因为敢于说你大部分时间不需要“这个”而被另一个帖子敲了敲。
【解决方案4】:

根据 MS 标准,您的代码是可以的。当您拥有高级 IDE 时,实际上不需要前缀为 m_。然而,像 _ 这样的短前缀可以用来利用自动完成功能来快速整理类成员。

我建议您购买“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”一书以了解有关 MS 标准的更多信息

【讨论】:

  • m_ 或 _ 或任何必要的东西,如果你不想在每个变量前面加上 'this'
  • @EdSwangren,当你不得不使用“this”时,这是非常不寻常的情况。建造。如果您使用描述性名称,您会发现唯一需要(但不是必需)的地方是构造函数
  • 是的 - MS 没有关于私有字段的指南。我们使用下划线。一定要得到框架设计指南——注意还有第二版:amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/…
  • 我现在正在读这本书,它说所有标识符都使用 Pascal 表示法,但使用骆驼表示法的参数除外。我没有看到任何关于私有字段的信息。
  • @aku,此外,StyleCop 建议在任何适用的地方使用它作为限定符。如果立即确定某些内容仅限于类,而不是单个方法,它确实在这方面有所帮助。不过,风格上的意见比任何具体的意见都要多。
【解决方案5】:

绝对不要使用 m_timesDone。

简单地说“private int timesDone”。

您可以通过阅读一些好书(例如 Code Complete)来了解如何命名变量。

【讨论】:

  • 呃...为什么不呢?对我来说听起来有点教条,-1
  • 这违反了编码准则。这不是 C# 的编写方式。就像您不以小写字母开头的方法一样。
  • 这是个人/公司的偏好,真的。私有字段与公共 API 无关,因此使用(或不使用)不会违反 .NET 标准 IMO。
  • AFAIK 的指导方针并没有说任何关于 private 的东西。我个人更喜欢_privateField,因为这样我可以拥有名为privateField 的ctor 参数,并且您可以立即看到局部变量和实例字段之间的区别。
【解决方案6】:

在成员字段前加上 m_ 的惯例来自 C++ 的早期,当时Hungarian notation 很流行。这不是 C# 约定,并且由于大多数 C# 代码是使用最近的 Visual Studio 编写的,因此它会增加视觉噪音而没有任何相应的优势,因为无论如何您都可以轻松查看变量的范围。不要使用 m_。

匈牙利表示法在 C# 中的唯一例子是在接口类名称前加上 I 的做法,例如 IDisposable。

【讨论】:

  • 很多人也习惯性地以T开头类型参数,这有点匈牙利式。
  • @Eric,您认为这是要避免的事情吗?这不是 MS 在 BCL 中所做的吗?
【解决方案7】:

您会发现的唯一一致点是它应该不是 TimesDown,但它应该以小写字母开头。
在较早的出版物(MS、MSDN)中,不鼓励使用前导下划线。后来它又回来了,特别是对于属性的支持字段:_timesDown。

【讨论】:

    【解决方案8】:

    通常采用的策略是:

    对于Class & Method:Pascal Casing

    例如

    public class Program
     {
     }
    

    例如

    public void DoSomething() { } 
    

    对于变量:Camel Casing 例如时间下降

    局部变量:

       aTimesDown
    

    全局变量:

    myTimesDown
    

    希望对你有帮助:)

    【讨论】:

    • NB 这些适用于公共/受保护成员和公共非成员类。没有关于私人成员的指南。
    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多