如何组织C#类

有关如何在C#中组织类的常规做法吗? 每个.cs文件只应该有一个generics类吗? 我看到我有Form1.cs,其中包含与“Form1”相关的所有类。 但是我可以创建一个名为Misc.cs的文件,其中包含所有misc类。 不知道要走哪条路,所以一切都井井有条。

或者我应该以特定的方式组织它们? 例如,我正在访问一个MySQL数据库,所以我正在创建一个MySQL包装器,我将它存储在MysqlWrapper.cs中并命名该类以匹配它。 我应该为我创建的每个类创建一个新的.cs吗?

或者我应该只使用类似“使用”命名空间的那些,例如System.Text; 使用System.Windows.Forms; 等等?

编辑 – 这个答案旨在补充其他人已经发布的好答案。

其他人似乎都在回答具体问题。 我在想你会有更多的“最佳实践”设计问题。

官方指南可以在这里找到: http : //msdn.microsoft.com/en-us/library/czefa0ke(VS.71).aspx

特别是,深入了解命名准则,然后进入命名空间命名准则和类命名准则。

并且,正如其他人提到的那样,每个文件一个类。 它会让那些关注你的可怜维护开发人员更轻松。

通常,我为每个类创建一个单独的.cs文件。 另外,我组织文件以匹配类名称空间。

随着项目变得更大,这简化了组织,因为您总是知道在项目中找到类的位置。 随着越来越多的人正在研究解决方案,这变得更加重要。 每个文件一个类也可能是有益的,因为文件夹结构让您了解命名空间的复杂性,这有助于我意识到何时需要拆分命名空间,因为它们太复杂了。


我看到我有Form1.cs,其中包含与“Form1”相关的所有类。

我建议不要以这种方式组织,而是将它们分成不同的文件。 如果你有很多与特定操作相关的类(由Form1执行或通过Form1访问),我会考虑将它们放入自己的命名空间中。 我还强烈建议将“Form1”重命名为更有意义的内容,例如“EmployeeForm”。 这将使您更容易理解和维护您的代码。

通常接受每个文件一个类。 有些类使用“partial”关键字分布在多个文件中。 我的文件夹结构与命名空间结构松散匹配。

我可能会因为这样说而被鞭打,但至少在Visual Studio中,它可能不像过去那样重要。

我的大多数文件每个只有一个类,但对于像普通枚举和仅由另一个类使用的简单存储类这样的东西,我只是将它们放在与主类相同的文件中。 否则如果我想在其他地方使用同一个类,我会移动多个文件并试图猜测我需要哪些。

您可以右键单击标识符并单击“转到定义”以导航到它,您可以按ctrl +逗号进行搜索,也可以使用“类视图”。

我将相关的.cs文件分组到文件夹中 – 这种更大的图片似乎更重要。 我还确保文件夹名称始终与命名空间匹配,即我保留Visual Studio在文件夹中创建新类文件时提供的默认命名空间。

我没有严格遵循每个文件一级的规则。 如果我正在处理一个包含大量代码的非常大的类,我可能会给它自己的文件。 但是,一般来说,只要它们以逻辑方式相互关联,我就不会在同一个文件中保留多个类。 这对于小class级来说效果最好,但对于大class级来说可能不是最好的想法。

作为一般规则,如果每个文件有一种类型,则代码更易于维护(对其他人来说更容易阅读)。 (类/结构/枚举)。

但是,对于部分类,我有时会根据主要的function部分将大类分成多个文件。 如果一个类有私有嵌套类型,我几乎总是将这些嵌套类型放在不同的文件中。

我通常每个文件有一个类。 唯一的例外是,如果一个类有一个私有嵌套类,我通常会将它保存在同一个文件中,而不是使用partial关键字将其拆分为另一个文件。 这样我就能找到更容易找到的东西。

您只需要一些原则:

可维护性:应该很容易使项目保持最新并修复错误。 问题:找到给定的类/function需要多长时间? 如果有错误,是否可能发生程序员(谁不一定是作者)看起来?

复杂性:应该清楚程序的作用。 有时将它拆分有助于。 有时保持在一起有助于。 问题:有人在看到它时会感到困惑吗? 他们会想知道所有部件是什么吗?

这真的只是常识。 此外,请注意某些IDE工具将允许您将事物处于混乱状态,并且仍然能够找到内容(例如,参考查找器)。 你必须决定什么程度的混乱可以接受,什么时候重构。

您不应该在文件中组合使用类似“使用”命名空间的类,因为如果您必须更改类的实现,则必须将类移动到其他文件。

我为每个类保留一个文件,因为它对源代码控制系统非常有用。 此外,我尽可能避免部分课程。 如果一个class级太大,那么设计就会出现问题。

我有时也会将类似的类文件合并到VS中的一个分支中。

例如 – 如果您有3个文件:Message.xaml,Message.xaml.cs,MessageButton.cs,MessageImage.cs,MessageResult.cs。

Message.xaml.cs已经显示在第一个文件的层次结构中。 您也可以使用记事本编辑项目文件来添加其他文件。 你只需要添加

  

标签在哪里需要。

我不知道VS是否有任何扩展以更容易的方式做到这一点。

这是一回事。 虽然这可以帮助您在项目中组织文件,但只需在VS中单击两次文件名,就无法重命名您的类。