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

在类的末尾声明变量有什么意义?

  •  2
  • serhio  · 技术社区  · 15 年前

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

    我觉得这有点尴尬,因为每次VisualStudio添加一个方法时,它都会将它添加到类的末尾,所以每次都需要移动它。。。

    class A
    {
      public A(){}
      // Methods, Properties, etc ...
    
      private string name;
    }
    
    class A
    {
      private string name;
    
      public A(){}  
      // Methods, Properties, etc ...
    }
    
    4 回复  |  直到 15 年前
        1
  •  3
  •   Thomas    15 年前

    在C++中,将类的公共接口置于顶部是有意义的,因此 用户 这个类的成员可以打开你的头文件并快速查看可用的内容。言下之意,受保护的成员和私有成员被放在最下面。

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

        2
  •  2
  •   David M    15 年前

    如果很明显已经声明了变量,并且代码是作为示例的,那么可以说这可以让您更快地看到正在演示的位—这就是我所能想到的。

    像ReSharper这样的插件将允许您标准化并自动应用这个布局,只要按一下组合键,顺便说一句,如果它是您想要的。

        3
  •  1
  •   Sebastian Mach    14 年前

    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_;
    };
    

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

        4
  •  -1
  •   Anero    15 年前

    我不认为这有什么正当的理由。如果您对这样声明的类运行代码分析,您将得到一个错误,因为私有字段应该在类的顶部(和常量的下面)声明。

    推荐文章