单独文件中的C#类?

时间:2020-03-06 14:50:08  来源:igfitidea点击:

我认为Cproject中的每个类都应该有自己的文件吗(我们认为)?

解决方案

公开课:是
私人班级:(不用说)否

虽然每个文件策略一个类都严格用Java实施,但C#并不需要。但是,通常这是个好主意。

如果我有一个很小的辅助程序类,仅供主类使用,那么我通常会违反此规则,但是为了清楚起见,我更喜欢将其作为嵌套的内部类来使用。

但是,我们可以使用partial关键字将单个类拆分为多个文件。这对于将代码与向导生成的代码分开非常有用。

这取决于。在大多数情况下,我会说"是",将它们放在单独的文件中。但是,如果我有一个私有的帮助程序类,该类只能由其他一个类使用(例如,链表的Node或者Element),则不建议将它们分开。

文件很便宜,通过将多个类合并到单个文件中,我们不会帮任何忙。

在Visual Studio中,在解决方案资源管理器中重命名文件将重命名该类以及项目中对该类的所有引用。即使我们很少使用该功能,但文件的便宜性和易于管理的功能意味着,除以其成本,其好处是无价的。

我实际上更喜欢.cs文件,5000行是非常合理的IMO,尽管目前我的大多数文件只有500-1000个(但是在C ++中,我有一些令人恐惧的文件)。对象浏览器/类视图,转到定义和增量搜索(-I;感谢杰夫·阿特伍德(Jeff Atwood!)),所有这些都使查找任何特定的类或者方法变得非常容易。

这可能是全部,因为我对关闭未使用的标签页感到很糟糕。

当然,这在很大程度上取决于工作方式,但是有足够多的工具不需要使用可怕的基于70年代的旧文件源导航(开玩笑,如果不太明显)。

当然!你为什么不呢?除了私有类之外,在一个文件中具有多个类是很愚蠢的。

它们应该位于不同的文件中,即使看起来有些过分。我仍然经常犯这种错误。

总有一段时间,我们已经向类添加了足够的代码,该代码值得它自己的文件。如果我们决定在那时为其创建一个新文件,那么我们将丢失提交历史记录,这在我们也不想这样做时总是会咬住我们。

就像其他人所说的那样,虽然其他类型的公用/专用有所区别,但通常每个类型一个文件,我只是说"每种类型一个顶级文件"(因此,即使顶级内部类型也可以拥有自己的文件)。

我有一个例外,这与.NET 3.5中Func和Action委托类型的出现不太相关:如果我在项目中定义了几种委托类型,我经常将它们捆绑在一起,称为Delegates.cs。 。

我最近也使用局部类来使几个自动生成的类实现相同的接口,这也有其他一些非常偶然的例外。他们已经定义了适当的方法,所以这只是写的一个例子:

public partial class MessageDescriptor : IDescriptor<MessageDescriptorProto> {}
public partial class FileDescriptor : IDescriptor<FileDescriptorProto> {}

等等。将所有这些都放到自己的文件中会有些愚蠢。

所有这些要记住的一件事:使用ReSharper可以更轻松地访问类,无论它们是否位于合理命名的文件中。这并不是说正确地组织它们并不是一件好事。更多的是强化ReSharper震撼的概念:)

我个人认为,每个类都应位于其自己的文件中,其中还包括嵌套类型。对于我来说,此规则的唯一例外是自定义委托。

大多数答案都将私有类排除在该规则之外,但我认为这些也应放在自己的文件中。这是我目前用于嵌套类型的模式:

Foo.cs://仅包含Foo实现

public partial class Foo 
{
   // Foo implementation
}

Foo.Bar.cs://仅包含Foo.Bar实现

public partial class Foo
{
  private class Bar
  {
    // Bar implementation
  }
}