为什么System.Design中的许多Designer类标记为内部?

时间:2009-08-28 13:16:18

标签: c# .net vb.net visual-studio design-time

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

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

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

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

此外,是否有更简单的选项可以重新实现所有功能?

2 个答案:

答案 0 :(得分:4)

从库中公开代码的成本很高。公开显示框架库。

Ii 强烈促使您维护产品生命周期的二进制(和可能的来源)兼容性。更糟糕的是,这些只是供应商想要使用的东西,这意味着MS打破这些类别的任何合同可能会破坏使用我的数百或数千付费客户的小部件。

打破向后兼容性是MSFT历来避免做的事情(见证了名为Foo2,Foo3和调用Blah和BlahEx的方法的接口数量)。 由于他们一生中以这种方式稳定地承担了相当大的“债务”,他们已经意识到从一开始就避免这些问题是将来减少此类问题的最便宜方式。因此,任何新的公共场所都必须非常强烈地证明其存在。

设计时间代码生成是一种强烈要求在软件生态系统的生命周期内进行改进的区域(查看VS中的部分类更改,以了解此区域的主要更改,但还有许多其他较小的更改) 。通过暴露严重依赖于此基础架构的类,他们将限制其更改其视为竞争优势的基础架构的范围。

因此,明智,安全的方法不是暴露这些类。如果不是微软的规模和客户群,我当然会采取相同的方法。

答案 1 :(得分:0)

我不知道,但我猜微软的回答是“这就是我们制作它的方式”,或者“我们希望减轻维护向后兼容性的负担。”