最佳实践:何时不/使用部分类

Way*_*oss 35 c# coding-style partial-classes

我一直在使用partial class修饰符,以便将helper类放在自己的文件中.

今天我们得到了一个新人,他说他工作的最后一个团队不允许部分类,因为修改一个单独的文件中的帮助器类会导致主要的部分类文件与更改失败.此外,他们只允许在主类中放置辅助类作为最后的手段,以便所有内容保持解耦.

你怎么看?使用像这样的部分类有什么问题,还是归结为偏好?

例如,我通常有这样的事情:

  • MainClass.cs
  • MainClass.Helper1.cs
  • MainClass.Helper2.cs

...

// Inside of MainClass.cs I have code like this:

public abstract partial class MainClass
{
    // ...
}

// Then in the MainClass.Helper1.cs I have:

partial class MainClass
{
   private class Helper1
   {
       // ...
   }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 27

部分类是主要的代码生成器的使用,如设计-但我用你提到的方法-特别是当一个对象实现多个(不平凡)接口,我发现它有用打破它,每个接口实现1档.我通常还有一个静态方法的文件,它通常与实例方法不同,以保证分离.


Pat*_*son 7

我个人认为使用像这样的局部类没有任何问题,但这只是我自己的看法.唯一可能看起来像"糟糕的做法"的是将你的类命名为"Helper1"和"Helper2"(但这可能仅仅是为了澄清).

如果您正在使用这样的部分类,请查看(免费)插件vsCommands(对于Visual Studio 2008),这样可以非常轻松地在解决方案资源管理器中对文件进行分组(就像设计器文件一样),而无需编辑项目文件.


Zac*_*tes 5

简短的回答:如果所有的类都是你的代码,你真的不需要帮助类,这使你对部分的需求无效。

长答案:我不确定是否有任何内容表明您的做法是明确错误的。根据我的经验,如果你有几个不同的文件组成整个类,你确实需要一个很好的理由这样做,因为:

  1. 部分类在一定程度上降低了可读性
  2. 如果您的类中有多个辅助类,这可能是设计不佳的征兆,我认为我从未遇到过被迫为我创建的类编写辅助类的情况。

但是,我认为使用部分类的最佳理由是代码生成,您希望能够在不丢失自定义工作的情况下重新生成文件。