Fly*_*wat 92
虽然每个文件的一个类策略在Java中是严格执行的,但C#并不要求它.但是,这通常是一个好主意.
如果我有一个仅由主类使用的非常小的辅助类,我通常会违反此规则,但为了清楚起见,我更喜欢将其作为嵌套的内部类.
但是,您可以使用partial关键字将单个类拆分为多个文件.这对于将代码与向导生成的代码分开很有用.
Chr*_*ham 40
文件很便宜,你可以通过将许多类合并为单个文件来帮助任何人.
在Visual Studio中,在解决方案资源管理器中重命名文件将重命名该类以及项目中对该类的所有引用.即使您很少使用该功能,文件的便宜性和管理它们的便利性意味着当它除以成本时,利益是无限有价值的.
Jon*_*eet 18
正如其他人所说,一般每种类型一个文件 - 虽然其他人已经公开/私人区分,但我只是说"每个类型一个顶级文件"(所以即使是顶级内部类型也可以获得自己的文件) .
我有一个例外,它与.NET 3.5中Func和Action委托类型的出现不太相关:如果我在项目中定义了几个委托类型,我经常将它们放在一个名为Delegates.cs的文件中. .
还有其他非常偶然的异常 - 我最近使用了部分类来使几个自动生成的类实现相同的接口.他们已经定义了适当的方法,所以这只是一个写作的例子:
public partial class MessageDescriptor : IDescriptor<MessageDescriptorProto> {}
public partial class FileDescriptor : IDescriptor<FileDescriptorProto> {}
Run Code Online (Sandbox Code Playgroud)
将所有这些放入自己的文件中会有些愚蠢.
要记住所有这一切:使用ReSharper可以更轻松地访问您的类,无论它们是否在合理命名的文件中.这并不是说正确组织它们并不是一件好事; 这更像是为了强化ReSharper摇滚的观念:)
我个人认为每个类都应该在自己的文件中,这也包括嵌套类型.关于此规则的唯一例外是自定义委托.
大多数答案都排除了此规则中的私有类,但我认为这些也应该在他们自己的文件中.这是我目前用于嵌套类型的模式:
Foo.cs://仅包含Foo实现
public partial class Foo
{
// Foo implementation
}
Run Code Online (Sandbox Code Playgroud)
Foo.Bar.cs://仅包含Foo.Bar实现
public partial class Foo
{
private class Bar
{
// Bar implementation
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
作为多年来一直在大文件中编码(限制为 1,000 行)的人,事实上,从我小时候开始编程以来,我对“每个源文件一个类”规则的巨大共识感到惊讶。
“每个源文件一个类”并非没有问题。如果您同时处理很多事情,您将打开许多文件。当然,您可以在完成文件后关闭它们,但是如果您需要重新打开它们怎么办?每次打开文件通常都会有延迟。
我现在将解决其他人提出的观点,并解释我认为“每个源文件一个类”规则的不良原因。现代源代码编辑技术解决了一个源文件中多个类的许多问题。
还有代码折叠。代码太多?只需将其折叠成一行!问题解决了。
“东西更容易找到,因为它们是由文件标识的” - 错误的原因 - 同样,现代 IDE 可以很容易地找到你要找的东西。只需使用解决方案资源管理器或购买 VisualAssist!技术在那里,使用它!
“更容易阅读/代码太多” - 错误的原因 - 我不是瞎子。我可以看到。同样,通过代码折叠,我可以轻松消除混乱并折叠我不需要看到的代码。这不是编程的石器时代。
“您会忘记类在大型项目中的位置” - 错误的原因 - 简单的解决方案:Visual Studio 中的解决方案资源管理器和 VisualAssist 扩展。
“您无需打开任何内容即可知道项目中的内容” - 很好的理由 - 与那个没有争议。
源代码控制/合并 - 很好的理由 - 这实际上是支持“每个源文件一个类”规则的一个很好的论据,尤其是在团队项目中。如果多人在同一个项目上工作。它使人们可以一目了然地看到发生了什么变化。如果您使用大型多类文件,我还可以看到它如何使合并过程复杂化。
源代码控制和合并过程确实是 IMO 应该应用“每个源文件一个类”规则的唯一令人信服的原因。如果我在做我自己的个人项目,不,这不是那么重要。
它们应该在不同的文件中,即使它看起来有点过分.这是我经常犯的错误.
总有一段时间,你已经为一个类添加了足够的代码,它应该拥有它自己的文件.如果你决定在那时为它创建一个新文件,那么你将丢失你的提交历史记录,当你不想要它的时候总会咬你.