最佳做法:在class级定义中订购公共/保护/私人?

我从头开始一个新的项目,希望它是干净的/有很好的编码标准。 这些经验丰富的开发人员在什么程度上喜欢把课堂内容放在课堂上?

答:1)公共方法2)私有方法3)公共variables4)私人variables

B:1)公共variables2)私人variables3)公共方法4)私人方法

C:1)公共方法2)公共方法3)私有方法4)私人variables

我通常喜欢把公共的静态variables放在最上面,但是在你的构造函数之前是否会列出一个公共的静态方法,还是应该首先列出构造函数? 之类的东西…

我知道这是芬尼,但我只是想知道:这是什么最佳做法?

PS:不,我不使用抄送。 我知道。 我是一个笨蛋。

在Clean Code中 ,Robert C. Martinbuild议编码员总是把成员variables放在类的最上面(常量第一,然后是私有成员),方法应该以这样的方式sorting,以便它们看起来像一个不会造成的故事读者需要跳过代码太多。 这是组织代码而不是通过访问修饰符更合理的方法。

最好的做法是保持一致

就个人而言,我宁愿先public方法,然后采取protected方法,然后采用private方法。 一般来说,会员资料应该是私人的或者是受保护的,除非你有充分的理由不这样做。

public方法放在最前面的原因是它定义了你的类的接口 ,所以任何仔细阅读头文件的人都应该能够立即看到这些信息。

一般来说, privateprotected成员对于大多数查看头文件的人来说并不重要,除非他们正在考虑修改这个类的内部。 保持它们“不受阻碍”,确保这些信息仅在需要了解基础的基础上进行维护,这是封装的一个更重要的方面。

我个人喜欢公开顶部,保护,然后私人。 这是因为,当有人打开标题时,他/她首先看到他/她可以访问的内容,然后滚动更多的细节。

我曾经很在乎。 在过去的几年中,使用现代的IDE几乎所有的事情都只有一两次击键,我已经让我的标准大大放松了。 现在,我从静态,成员variables,然后构造函数开始,我不担心它。

在C#中,我让Resharper自动组织东西。

我觉得我对此有不同的看法。 我更喜欢将相关的项目组合在一起。 我不能忍受不得不跳上class去上课。 代码应该stream动,并使用基于可访问性(公共,私有,受保护等)或实例与静态或成员与属性与function之间的相当人为的sorting不能保持良好的stream程。 所以如果我使用私有方法HelperMethodAHelperMethodB等实现的公共方法Method ,而不是让这些方法在文件中彼此远离,我会保持彼此接近。 同样,如果我有一个静态方法实现的实例方法,我也将它们组合在一起。

所以我的课程通常是这样的:

 class MyClass { public string Method(int a) { return HelperMethodA(a) + HelperMethodB(this.SomeStringMember); } string HelperMethodA(int a) { // returns some string } string HelperMethodB(string s) { // returns some string } public bool Equals(MyClass other) { return MyClass.Equals(this, other); } public static bool Equals(MyClass left, MyClass right) { // return some bool } public double SomeCalculation(double x, double y) { if(x < 0) throw new ArgumentOutOfRangeException("x"); return DoSomeCalculation(x, y); } const double aConstant; const double anotherConstant; double DoSomeCalculation(double x, double y) { return Math.Pow(aConstant, x) * Math.Sin(y) + this.SomeDoubleMember * anotherConstant; } } 

这将是我的订单

  1. 静态variables
  2. 静态方法
  3. 公共variables
  4. 受保护的variables
  5. 私有variables
  6. 构造函数
  7. 公共方法
  8. 受保护的方法
  9. 私有方法

我使用以下规则:

  • 静态之前
  • 在方法之前的构造函数之前的variables(我认为构造函数在方法的类别中)
  • 公开之前保护私人之前

这个想法是你在行为(方法)之前定义了对象(数据)。 静力学需要分开,因为它们不是对象的一部分,也不是行为。

我普遍赞同公众,保护,私人订单以及静态数据,会员资料,会员function的顺序。

虽然我有时会像成员(getter&setter)一样分组,但我通常更喜欢在ALPHABETICALL组内部列出成员,以便更容易定位它们。

我也喜欢垂直排列数据/函数。 我向右/向右选项卡/空格,以便所有名称都alignment在同一列中。

正如Elzo所说,对于他们自己而言,现代IDE使用下拉菜单中的彩色图标以简单的方式更容易地find成员及其修饰符。

我的看法是程序员知道这个类是为什么而devise的,以及它如何performance。

所以,如果它是一个单身人士,我首先把语义(静态getInstance()类)。

如果它是一个具体的工厂,我先把getNew()函数和寄存器/初始化函数。

… 等等。 当我第一次说的时候,我的意思是在不久的将来,因为它们是实例化任何阶级的默认方式。

接下来的function是:

  1. 逻辑调用顺序(例如initialize(),preProcess(),process(),postProcess())或
  2. 相关function(如访问器,实用程序,操作器等),

取决于类是否主要是指具有某些function的数据存储,或具有less数数据成员的函数提供者。

有些编辑器,比如Eclipse及其后代,允许您按照字母顺序或页面方式在大纲视图中重新sortingvariables和方法。

public和protected之后的私有序列对我来说更具可读性。最好在头文件顶部的注释中简单地描述类逻辑,然后使用函数调用命令来了解类内部使用的剂量和algorithm。

我正在使用Qt c ++一段时间,看到一些新的关键字,如signalslot我喜欢保持像上面这样sorting,并与我分享我的想法在这里。

 #ifndef TEMPLATE_H #define TEMPLATE_H class ClassName { Q_OBJECT Q_PROPERTY(qreal startValue READ startValue WRITE setStartValue) Q_ENUMS(MyEnum) public: enum MyEnum { Hello = 0x0, World = 0x1 }; // constructors explicit ClassName(QObject *parent = Q_NULLPTR); ~ClassName(); // getter and setters of member variables // public functions (normal & virtual) -> orderby logic public slots: signals: protected: // protected functions it's rule followed like public functions private slots: private: // methods // members }; #endif // TEMPLATE_H