绘制数据结构
本文关键字:数据结构 绘制 | 更新日期: 2023-09-27 18:19:53
我正在创建一个用于学习目的的数据结构(B-Tree)的实现。
我想把所需的类放入它自己的程序集中,并且只引用和使用那里最少量的.NET命名空间。当然,我也通过私有或内部尽可能多地隐藏数据和代码,这样类看起来就干净了。
在开发、调试等过程中,我确实会将树的图形表示绘制到位图上并将其转储到磁盘上,但要做到这一点,我需要System.Drawing、…2D、…Imaging、…Text作为名称空间。这些不应该是纯数据结构代码的一部分。此图纸代码应为"其他地方"
我已经完成了开发,一切都很好,画得很完美。我可以看到我的树在磁盘上的图片列表中生长和收缩,但我对解决方案的布局不满意。我认为我把每一次大会的关切都搞得一团糟。
目前,绘图代码是windows窗体代码的一部分,我在数据结构类中放入了相当多的公共特性,以允许绘图代码在绘图时获得所需的值。
现在,我该如何创建一个项目、类和程序集,在不影响纯数据结构类的情况下将树绘制为位图?
每当树确定它改变了结构并应该重新显示时,它就会引发事件(或调用委托?)。负责绘图的程序集需要这些调用,但也需要访问树的私有细节以显示它。
反射是我有些熟悉的东西,但它听起来有点过头了。
我可以进行DEBUG和RELEASE构建,并用条件编译(##IFDEBUG?)封装绘图部分,但这仍然意味着我需要在数据结构代码中包含大量代码(和编译提示)。
同一集合中的分部类?仍然需要参考System.Drawing
。
还有其他建议吗?
谢谢Ralf
这通常是一个难题,但您可以做的一件事是只向绘图代码公开internal
成员,这样其他代码就不需要知道它们的存在。您可以使用InternalsVisibleToAttribute
创建一个"朋友"程序集,该程序集能够访问另一个程序集的内部成员。然后,可以将图形代码放入第二个部件中,并保持主部件的原始状态。