在课程结束时声明变量的重点是什么?

时间:2010-05-14 12:01:18

标签: class-design

我在MSDN中看到了多个用于在类末尾声明内部字段的示例。有什么意义?

我发现这有点令人尴尬,因为每次Visual Studio添加一个方法时它会将它添加到类的末尾,所以每次都需要移动它...

class A
{
  public A(){}
  // Methods, Properties, etc ...

  private string name;
}

class A
{
  private string name;

  public A(){}  
  // Methods, Properties, etc ...
}

4 个答案:

答案 0 :(得分:3)

在C ++中,将类的公共接口放在顶部是有意义的,这样该类的任何用户都可以打开头文件并快速查看可用的内容。通过暗示,受保护和私人成员被置于底层。

在C#和Java中,接口和实现完全交织在一起,人们可能无法打开类的源代码来查看可用的内容。相反,他们将依赖于代码完成或生成的文档。在这种情况下,班级成员的顺序是无关紧要的。

答案 1 :(得分:2)

如果显而易见的是变量已被声明,而代码就是一个例子,那么可以说这可以让你更快地展示出来 - 这就是我所能想到的。

ReSharper这样的加载项允许您通过按键组合标准化并自动应用此布局,顺便说一句,如果它是您想要的。

答案 2 :(得分:1)

许多程序员都在努力自我编写代码,以帮助客户理解它。在C ++类声明中,它们将从最重要的(即可能最常检查的)变为最不重要的:

class Class {
public:
    // First what interest all clients.

    static Class FromFoobar(float foobar); // Named constructors in client code
                                           // often document best

    Class();                               // "Unnamed" constructors.

    /* public methods */

protected:

    // This is only of interest to those who specialize
    // your class.

private:
    // Of interest to your class.
};

在此基础上,如果您使用Qt,以下排序可能会很有趣:

class SomeQtClass : public QObject {
public:
signals:       // what clients can couple on
public slots:  // what clients can couple to

protected:
protected slots:
};

然后同样关闭受保护和私有插槽。没有具体的理由我喜欢信号而不是插槽;也许是因为信号总是公开的,但我猜它们的排序取决于情况,无论如何,我保持一致。

我喜欢的另一个方面是使用访问说明符来直观地分离数据中的行为(遵循重要性排序,行为优先,数据最后,因为行为是类实现者的最大兴趣):

class Class {
private:
    void foobar() ;

private:
    float frob_;
    int   glob_;
};

保留最后一条规则有助于防止类组件的视觉分散(我们都知道一些遗留类随着时间的推移看起来如何,当变量和函数混合时,不是吗?)。

答案 3 :(得分:-1)

我认为没有任何正当理由。如果对这样声明的类运行代码分析,则会出现错误,因为私有字段应该在类之上(以及常量之下)声明。