【问题标题】:C# - what are the benefits of "partial" classes?C# - “部分”类有什么好处?
【发布时间】:2010-11-29 10:23:01
【问题描述】:

我问这个是因为我发现分发类定义是一个非常危险的功能,因此你无法确定你是否了解它。即使我找到了三个部分定义,我怎么知道某处没有第四个?

我是 C# 的新手,但已经使用 C++ 10 年了,也许这就是我动摇的原因?

无论如何,“部分”概念一定有一些很大的好处,我显然错过了。我很想了解更多关于它背后的哲学。

编辑:抱歉,在搜索现有帖子时错过了this duplicate

【问题讨论】:

  • “我怎么知道某处没有第四个?”这里的问题不是部分类,而是对你正在编译的项目缺乏了解。
  • @mackenir:尝试向分配给 100000 多行代码项目的维护开发人员提出这个论点。
  • Visual Studio 中的“转到定义”功能将为您提供一个列表,例如,声明部分类型的四个位置。

标签: c# language-design partial-classes


【解决方案1】:

部分类在使用代码生成时很方便。如果您想修改生成的类(而不是从它继承),那么在重新生成代码时,您将面临丢失更改的风险。如果您能够在单独的文件中定义额外的方法等,则可以重新创建类的生成部分,而无需对您的手工代码进行核对。

【讨论】:

  • +1 - 事实上,Visual Studio 附带的表单构建器工具使用了这个特性。
【解决方案2】:

最大的好处是隐藏计算机生成的代码(由设计者)。
Eric Lippert 最近有一篇关于partial-keyword 的博文。

另一种用法是为嵌套类提供自己的文件。

【讨论】:

    【解决方案3】:

    另外一点是,当一个类实现多个接口时,您可以将接口实现拆分到不同的文件上。

    所以每个代码文件都只有属于接口实现的代码。这是根据关注点分离的概念。

    【讨论】:

      【解决方案4】:

      两个人编辑同一个类,自动生成的设计器代码是我可以看到的两个直接功能,已通过部分类和方法解决。

      与 1.1 相比,将设计器生成的代码放在单独的文件中要容易得多,在 1.1 中,您的代码通常会被 Visual Studio(在 Windows 窗体中)破坏。

      Visual Studio 仍然在将设计器文件、隐藏代码和设计文件与 ASP.NET 同步方面搞得一团糟。

      【讨论】:

      • 两个人编辑同一个类应该使用版本控制,而不是部分类。
      • 或两者兼而有之,如果它是一个包含 1000 行的巨大遗留类,则可以避免合并头痛。
      • 我并不是说这是正确的工作方式,但这是部分类背后的想法之一:msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx
      【解决方案5】:

      如果您有某种荒谬的大类,由于某种原因无法或不允许在逻辑上分解成更小的类,那么您至少可以在物理上将它们分成多个文件,以便更有效地使用它。本质上,您可以一次查看小块,避免上下滚动。

      这可能适用于遗留代码,这些代码可能由于一些神秘的政策而不允许与现有的 API 发生冲突,因为存在大量且根深蒂固的依赖关系。

      不一定是部分类的最佳用途,但肯定会为您提供一个替代选项来组织您可能无法修改的代码。

      【讨论】:

        【解决方案6】:

        也许为时已晚,但请让我也加我的 2 美分:

        *.在处理大型项目时,将一个类分布在单独的文件中允许多个程序员同时处理它。

        *.您可以轻松地为 VS.NET 生成的类编写代码(用于扩展功能)。这将允许您编写自己需要的代码,而不会弄乱系统生成的代码

        【讨论】:

          猜你喜欢
          • 2021-07-25
          • 2010-11-06
          • 2019-11-29
          • 1970-01-01
          • 2011-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-28
          • 1970-01-01
          相关资源
          最近更新 更多