我在MSDN中看到了多个用于在类末尾声明内部字段的示例。有什么意义?
我发现这有点令人尴尬,因为每次Visual Studio添加一个方法时它会将它添加到类的末尾,所以每次都需要移动它...
class A
{
public A(){}
// Methods, Properties, etc ...
private string name;
}
class A
{
private string name;
public A(){}
// Methods, Properties, etc ...
}
答案 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)
我认为没有任何正当理由。如果对这样声明的类运行代码分析,则会出现错误,因为私有字段应该在类之上(以及常量之下)声明。