1

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

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

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

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

此外,是否有更简单的选择来重新实现所有功能?

4

2 回答 2

4

从库中公开代码具有与之相关的高成本。从框架库中公开甚至更高。

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

打破向后兼容性是 MSFT 历来避免做的事情(例如称为 Foo2、Foo3 的接口数量以及称为 Blah 和 BlahEx 的方法)。由于他们在一生中以这种方式不断地招致大量“债务”,他们意识到从一开始就避免这些问题是未来减少此类问题的最便宜的方法。因此,任何新的公共 API 都必须非常强烈地证明它们的存在。

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

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

于 2009-08-30T07:52:18.043 回答
0

我不知道,但我猜微软的回答要么是“我们就是这样做的”,要么是“我们想减轻维护向后兼容性的负担”。

于 2009-08-30T02:09:18.830 回答