私人类字段

问题描述:

代码外壳的问题概括起来,有两个思想基本思路:私人类字段

  • 私人领域应该只是CamelCase相匹配的.NET指引
  • 私人领域应CamelCase但带有一个_预先附加的用于区分方法范围变量和类范围变量。

原贴

看看下面的例子

public class Class1{ 

    public string Prop1{ 
     get {return m_Prop1;} 
     set {m_Prop1 = value; } 
    } 
    private string m_Prop1; // This is standard private property variable name. 

    // How do we cap this variable name? While the compiler can figure out same casing 
    // it makes it hard to read. 
    private Class2 Class2; 

    // We camel case the parameter. 
    public Class1(Class2 class2){ 
     this.Class2 = class2; 
    } 
} 

这里是我的原料规则

  • 类的名字是大写(1类)
  • 的公共属性是大写(Prop1)
  • 与公共财产挂钩的私人领域有m_表明这一点。我的同事喜欢_。有一些辩论,如果使用m__应该使用,因为它就像Hungarian notation
  • 私人班级字段是大写。

我试图弄清楚的部分是如果私人领域的类名称匹配私人领域的名称,我该怎么办。例如,私人Class2 Class2;。这很混乱。

如果私有字段名称不是同一类,例如私有字符串名称;,没有太多问题。

或者我是以错误的方式思考问题?我的课程和私人领域是否应该以不碰撞的方式命名?

===

下面的做法是使用小写私有财产的名称,但我们有这个问题。

class1{ 
    private string name; // This is scoped to the class. 

    public void Set(){ 
     string firstName; // This is scoped to the method. 
     .... // Lot of code. 
     // Should use this.name but nothing prevents. 
     // Now there is confusion if name is a class property or scoped to the method. 
     name = firstName; 
} 

或ReSharper的指导方针。

私人财产,像任何其他财产一样被收容。 私人领域,小写,以下划线开头。

private string _foo = string.Empty; 
    private string Bar { get; set; } 
+0

-1?为什么?这是一个非常有效的回应。 – CaffGeek 2010-03-16 14:10:30

+0

这似乎是最好的解决方案,因为它区分了私有类属性和本地方法变量,并且还解决了属性类与名称相同的问题。 – Kenoyer130 2010-03-16 14:12:48

我认为如果您坚持使用.NET Framework的编码约定,您的问题将得到解决。例如,私人会员以小写字母开头。

+0

的麻烦是,当一个私有成员隐藏了公共财产,如名称和名称。智能感知可以*真的*吸引你,包括引入无限循环,因为你错过了它决定你分配给属性设置器中的属性...。 :-)我不在乎下划线约定,但它确实有助于解决这类问题。 – 2010-03-16 13:43:40

+0

我也喜欢小写的方法变量,所以当我使用私有类属性与方法变量时会出现混淆。 – Kenoyer130 2010-03-16 13:55:39

你应该只关注微软的naming guidelines

请记住运行代码分析以确保您做得正确。

+1

对于公共的东西,一致认同,因为别的什么都会让人惊讶。对于私人的东西,你的团队认为最好,而不是微软认为最好的。 – 2010-03-16 13:41:37

+1

@ T.J。 Crowder:公平的观点,但我认为不需要提出一个新的约定,当一个深思熟虑的约定已经存在,并且可以自动检查(通过CA)。 – 2010-03-16 13:44:08

+2

要添加到T.J.克罗德的观点 - 微软的命名指南涵盖了类/接口等的公共接口......他们并不指定应如何命名私有成员,某些命名准则的贡献者确实使用_“privatefield”作为自己的代码。但是,这应该被定义并保持一致为您自己的球队 – saret 2010-03-16 13:58:00

他们应该以他们不会碰撞的方式命名,恕我直言

我要说不使用m__,以更好地前缀私有字段并命名字段,如果它被命名为更好地将默认情况下不发生冲突。

+1

+1更好地命名您的领域。当别人阅读这段代码时,如果我看到私人的Class2 Class2;我会生气。拿出一个描述变量目的的名字。 – 2010-03-16 13:52:49

+0

那就是核心问题。如果我有一个名为Shipment的类,然后私有实例是?装运货物?装运货物?运送myShipment? etc – Kenoyer130 2010-03-16 14:04:28

+0

@ user200295它不仅仅是一个货件,而是一个特定的货件,如'orderShipment' _a_和_my_不向变量名称添加任何信息。 – Cornelius 2010-03-17 05:51:50

正如前面提到的,你应该遵循的框架德兴准则。 但无论如何我很好奇,为什么你之间的“私人领域绑在公共财产”和“私有类字段”


关于你的问题的更新版本的命名约定有所不同: 如果你的方法是这么长时间,你是不是能够区分,如果一个变量是在方法体或作为放慢参数decleared,比你应该想想refractoring .... 这是最好的回答这个问题,我迄今听到的,它虽然不是最好的。

+0

我正在考虑指出一个没有公共访问权的私人领域和一个私有领域与公共属性getter/setter之间的区别。 – Kenoyer130 2010-03-16 13:47:35

+0

关于您的问题的更新版本:我曾经听到过的最佳答案是:“如果您的方法太长以至于无法区分变量是否在方法体中或作为参数被删除,那么您应该考虑refractoring“。那么它不是最好的答案,虽然 – Kenoyer130 2010-03-16 14:09:48

+0

我完全同意,但这似乎仍然是可疑的。我倾向于私人财产_camelCase – Kenoyer130 2010-03-16 14:10:12