部分类有多种形式

Posted

技术标签:

【中文标题】部分类有多种形式【英文标题】:A partial class has multiple form 【发布时间】:2014-03-16 09:20:06 【问题描述】:

当我编写一个 winforms 应用程序时,我倾向于为每个表单创建一个 Implementation.cs 文件。

假设我有 Form1.cs,我将创建一个名为 Form1.Implementation.cs 的新文件,以 partial class Form1 开头。

Form1.cs 只包含所有的事件回调方法(设计者所做的),其他的都交给 Form1.Implementation.cs。它帮助我编写更具可读性的代码。


我希望 Form1.Implementation.cs 成为一个“子文件”,就像 Form1.Designer.cs 一样,所以我编辑了 .csproj 文件。

<Compile Include="Form1.Implementation.cs">
    <DependentUpon>Form1.cs</DependentUpon>
</Compile>

然而,在重新加载之后,Visual Studio 会自动在 DependentUpon 元素之后添加 &lt;SubType&gt;Form&lt;/SubType&gt;。双击 Form1.Implementation.cs 不会显示代码,而是显示具有另一个初始空表单的设计器。

好像

“类Form1,其中ISA Form,是(?)多种形式。”

我尝试将adding DesignerCategory attribute 用于类Form1,但它也会影响Form1.cs

嗯,按“Shift-F7”或“Ctrl-Shift-0”并不是什么大问题。 我想知道...

    这是 Visual Studio 的故障, 次要(?)形式确实以某种方式存在, 有一天它会炸毁我的 winforms 项目

【问题讨论】:

您应该考虑采用更“架构化”的方法来处理您的代码。也许 MVP 会适合.. 你的 Form 只是变成一个愚蠢的视图,而实际的代码位于 Presenters 中。 该属性适用于Form1 类型,而不适用于其中一个源文件。实际上,部分类只存在于代码中,在编译时会被合并。 【参考方案1】:

实现您所尝试的唯一方法是添加您已经知道的&lt;DependentUpon&gt;。现在 Visual Studio 会自动为从Form 派生的任何类添加&lt;SubType&gt;Form&lt;/SubType&gt;。由于您的 Form1.cs 可能包含行 public partial class Form1 : Form,这就是 SubType 的来源。

其他文件 - Form1.Designer.csForm1.Implementation.cs 可能仅包含 partial class Form1,但由于跨多个文件的部分类定义仍然有效一个类定义,Visual Studio 检测到它仍然继承Form。我相信你可能已经知道了,但以防万一here's the MSDN article about the partial keyword。不要担心在这种情况下会有多个Form 实例。请记住,这仍然只是一个类 - Form1,不管你传播了多少文件。

最后,所有包含继承Form(或UserControl)的类(甚至是部分!)的代码文件都会在设计器中自动打开。此行为是设计使然。

这里的解决方案很简单——要么创建一个代码文件来定义一个不基于Form 的单独类,要么只使用 F7 在解决方案资源管理器中查看该文件的代码,尽管这看起来很烦人。该代码文件是否为&lt;DependentUpon&gt; 并不重要。只有Form 或UserControl 的继承很重要。

在我看来,最好的解决方案是坚持使用 Visual Studio 为您提供的功能:

设计器生成的代码保留在 Form1.Designer.cs 中 您的代码(您在 Implementation 中放入的代码)进入 Form1.cs (按 F7 以查看该代码,而不是转到设计器)

这是我的团队几年来一直坚持的方法。它提供了分离设计器代码和手动编码操作的基本方法。为了更好地分离您的代码,请按照 Simon Whitehead 在 cmets 中的建议,使用 MVP 等设计模式。

【讨论】:

以上是关于部分类有多种形式的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战第7章——利用AdaBoost元算法提高分类性能

鸢尾在植物分类学上的分类都有哪些?

部分类/部分类文件

短文本分类概述

用另一个部分类覆盖部分类的默认构造函数

从部分类访问类字段