代码之家  ›  专栏  ›  技术社区  ›  Pondidum

为什么System.Design中有许多Designer类标记为Internal?

  •  1
  • Pondidum  · 技术社区  · 16 年前

    我一直在为我们的产品开发一些组件,其中一个是基于流程布局面板的。

    我想做的是为它提供一个定制的设计器,但是不要失去它的默认设计器提供的功能。( System.Windows.Forms.Design.FlowLayoutPanelDesigner )标记为 internal .

    使用Reflector,我想我会自己再次实现它,因为它继承了“FlowPanelDesigner” and that from paneldesigner`所有这些都是内部的。

    为什么这些类要特别标记为内部类?这是因为它们是专门用于Visual Studio的,因此不是“框架”代码吗?

    此外,是否有一个更容易的选项来重新实现所有功能?

    2 回复  |  直到 16 年前
        1
  •  4
  •   ShuggyCoUk    16 年前

    从库中公开代码与之相关的成本很高。暴露于 框架 图书馆更高。

    强烈地 推动您在产品生命周期中保持二进制(和可能的源代码)兼容性。更糟糕的是,这些都是供应商可能会使用的东西,这意味着微软违反这些类上的任何合同都可能会破坏一个使用我的数百或数千个付费客户的小部件。

    打破向后兼容性是MSFT历史上一直避免做的事情(可以看到名为foo2、foo3的接口数量,以及名为blah和blahex的方法)。 由于他们在一生中以这种方式稳定地承担了相当大的“债务”,他们意识到,从一开始就避免这些问题是未来减少此类问题的最廉价的方法。因此,任何新的公共API必须非常有力地证明它们的存在。

    设计时代码生成是一种强烈要求在软件生态系统的整个生命周期中进行改进的领域(查看vs中的部分类更改,了解该领域的主要更改,但还有许多其他较小的更改)。通过公开那些严重依赖于这个基础设施的类,它们将限制它们更改它们视为竞争优势的基础设施的范围。

    因此,明智、安全的方法是不公开此类。我当然也会采取同样的方法,而不是像微软这样规模和客户群庞大的公司。

        2
  •  0
  •   Paul Williams    16 年前

    我不知道,但我想微软的答案可能是“我们就是这样做的”,也可能是“我们想减轻保持向后兼容性的负担”。