代码之家  ›  专栏  ›  技术社区  ›  Iain

如果使用getter和setter,应该如何命名私有成员变量?

  •  4
  • Iain  · 技术社区  · 16 年前

    作为一种后续行动 this question about prefixes ,我同意线程上大多数人的看法,即前缀不好。但是如果你使用的是getter和setter呢?然后,您需要将公开可访问的getter名称与私有存储变量区别开来。我通常只使用下划线,但有更好的方法吗?

    6 回复  |  直到 16 年前
        1
  •  6
  •   David Arno    16 年前

    这是一个完全主观的问题。没有更好的方法。

    一种方法是:

    private int _x;
    public get x():int { return _x; }
    public set x(int val):void { _x = val; }
    

    另一种是:

    private int x;
    public get X():int { return x; }
    public set X(int val):void { x = val; }
    

    答案也不正确。各有风格的优点和缺点。选择一个你最喜欢的,并坚持应用它。

        2
  •  6
  •   Craig Walker    16 年前

    正如其他人提到的,我喜欢在字段前面加下划线。

    private int _x;
    

    不过,我认为这超出了直接的个人偏好(正如大卫·阿诺在本文中所说)。我认为这样做有一些真正客观的原因:

    1. 这意味着您不必为赋值(特别是在setter和constructors中)编写“this.x=x”。
    2. 它将字段与局部变量/参数区分开来。这一点很重要:字段比本地字段更难处理,因为它们的范围更广/使用寿命更长。添加额外的字符对于编码人员来说有点像是一个心理警告信号。
    3. 在某些IDE中,下划线将导致自动完成将字段排序到建议列表的顶部。这使得在一个块中更容易看到类的所有字段。这反过来也会有所帮助;在大型类中,您可能无法在与正在处理的代码相同的屏幕上看到字段(通常在类的顶部定义)。将它们分类到顶部提供了一个方便的参考。

    (这些约定是针对Java的,但对于其他语言存在类似的约定)

    这些东西看起来很小,但它们的流行无疑使我在编码时的生活更轻松。

        3
  •  3
  •   André    16 年前

    在Java中有这个。在Python中的FoO有Self.Fo和其他语言有相似的东西,所以我不需要用特殊的方式命名某些东西,当我已经可以使用语言构造时。在相同的上下文中,好的IDE和编辑器可以理解成员变量并赋予它们一个特殊的亮点,这样您就可以真正地使用特殊的名称看到它了。

        4
  •  1
  •   Garry Shutler    16 年前

    在区分大小写的语言中,我只使用:

    private int myValue;
    
    public int MyValue
    {
        get { return myValue; }
    }
    

    否则我将使用下划线

    Private _myValue As Integer
    
    Public ReadOnly Property MyValue As Integer
        Get
            Return _myValue
        End Get
    End Property
    
        5
  •  1
  •   community wiki Matthew Scharley    16 年前

    有许多不同的方法可以做到这一点,就像有程序员可以做到这一点一样,但是一些更流行的方法包括(对于一个属性 Foo ):

    • MFO
    • 米福
    • 福禄
        6
  •  1
  •   Gary Kephart    16 年前

    喜欢 写“this.x=x”。我很清楚。另外,当使用Eclipse时,您可以让它以这种方式自动生成getter/setter。