- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在为我们的产品开发一些组件,其中之一是基于流布局面板。
我想做的是为它提供一个自定义设计器,但不会丢失其默认设计器 (System.Windows.Forms.Design.FlowLayoutPanelDesigner
) 提供的功能,它被标记为 内部
。
使用 Reflector 我想我会自己再次实现它,因为它继承自“FlowPanelDesigner和
PanelDesigner”,所有这些都是内部的。
为什么要将这些类特别标记为内部类?是因为它们专门供 Visual Studio 使用,而不是“框架”代码吗?
此外,是否有更简单的选项来重新实现所有功能?
最佳答案
从库中公开代码的成本很高。从一个框架库公开甚至更高。
Ii 强烈 促使您在产品的整个生命周期内保持二进制(和可能的源代码)兼容性。更糟糕的是,这些只是供应商会被诱惑使用的那种东西,这意味着 MS 违反这些类的任何契约(Contract)可能会破坏我的数百或数千付费客户使用的小部件。
破坏向后兼容性是 MSFT 历来避免做的事情(见证称为 Foo2、Foo3 的接口(interface)数量以及调用 Blah 和 BlahEx 的方法)。由于他们在他们的生活中以这种方式稳步承担了相当大的“债务”,他们意识到从一开始就避免这些问题是 future 减少此类问题的最便宜的方法。因此,任何新的公共(public) API 都必须非常有力地证明它们的存在。
设计时代码生成是一种强烈要求在软件生态系统的生命周期内进行改进的领域(查看 VS 中的部分类更改,了解该领域的重大变化,但还有许多其他较小的变化) .通过公开严重依赖于此基础设施的类,他们会限制改变他们认为是竞争优势的基础设施的范围。
因此,明智、安全的方法是不公开此类。如果不是像 Microsoft 这样规模和客户群的公司,我当然会采用相同的方法。
关于c# - 为什么 System.Design 中的许多 Designer 类都标记为内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1346910/
我是一名优秀的程序员,十分优秀!