对于公共或私有成员/函数是否在类中排在首位,是否有标准或公认的代码样式?
我希望在 Google 上找到很多关于此的信息,但什么也没找到。
看看这个SO question。它具有StyleCop 规则文档的要求。
相当好用的标准。
旁白:有一个免费的 C# 插件。当您知道自己做错了什么时,遵循规则会变得更加简单。它会告诉您是否违反了规则,并且可以设置为在构建步骤中运行。
StyleCop执行了一些规则,我看到很多人将其用作标准。
坦率地说,它们是有道理的1,但我认为这不是最好的方法。
我认为事物应该按功能分组,而不是按类型、可访问性或static
等。我认为按功能组织的方案在尝试阅读或维护代码库时需要最少的导航量。任何其他排序方案(或*规则)都会让您在尝试使用它时在整个课程中导航。将有意义的事物放在一起的概念排序将最大限度地减少这种跳跃。这是为了更容易理解和使用它。这是一个实用的观点,而不是为了制定可以执行的规则而制定规则。
1:它们是有道理的,因为它们是规则,它们吸引我们中间的强迫症,它们可以被机器强制执行,但谁在乎机器是否可以强制执行它们?但代码不是为机器服务的,而是为人类服务的。当我需要理解代码时,我不会想“如果我能先理解所有常量字段,然后再理解所有字段等”。我采取了一种非常不同的方法。我想先看大局,而有助于实现这一目标的一件事是查看按功能组织的代码。
不,这只是个人喜好问题。如果适用,请关注您的公司。
正如人们所说,顺序通常无关紧要。但是,有一个重要的例外,那就是初始化静态字段。您可以根据其他静态字段的值来初始化静态字段 - 这一切最终都会编译到静态构造函数中,但要按照在代码中编写的顺序进行。
例如:
class Program {
private static int j = 4;
private static int i = Program.j;
static void Main(string[] args) {
Console.WriteLine(Program.i); // 4
}
}
但:
class Program {
private static int i = Program.j;
private static int j = 4;
static void Main(string[] args) {
Console.WriteLine(Program.i); // 0
}
}
因此,如果您决定重新调整您的成员,请记住这种情况。为了完全安全,您可以将初始化放在静态构造函数中,例如:
class Program {
private static int i;
private static int j;
static Program() {
Program.j = 4;
Program.i = Program.j;
}
}
它没有提及类中的public
、函数或成员protected
的排序。private
我知道在我过去的经验中FxCop
“建议”我将我的公共职能放在我的私人职能之前,但也不一定是标准。