绘制数据结构

本文关键字:数据结构 绘制 | 更新日期: 2023-09-27 18:19:53

我正在创建一个用于学习目的的数据结构(B-Tree)的实现。

我想把所需的类放入它自己的程序集中,并且只引用和使用那里最少量的.NET命名空间。当然,我也通过私有或内部尽可能多地隐藏数据和代码,这样类看起来就干净了。

在开发、调试等过程中,我确实会将树的图形表示绘制到位图上并将其转储到磁盘上,但要做到这一点,我需要System.Drawing、…2D、…Imaging、…Text作为名称空间。这些不应该是纯数据结构代码的一部分。此图纸代码应为"其他地方"

我已经完成了开发,一切都很好,画得很完美。我可以看到我的树在磁盘上的图片列表中生长和收缩,但我对解决方案的布局不满意。我认为我把每一次大会的关切都搞得一团糟。

目前,绘图代码是windows窗体代码的一部分,我在数据结构类中放入了相当多的公共特性,以允许绘图代码在绘图时获得所需的值。

现在,我该如何创建一个项目、类和程序集,在不影响纯数据结构类的情况下将树绘制为位图?

每当树确定它改变了结构并应该重新显示时,它就会引发事件(或调用委托?)。负责绘图的程序集需要这些调用,但也需要访问树的私有细节以显示它。

反射是我有些熟悉的东西,但它听起来有点过头了。

我可以进行DEBUG和RELEASE构建,并用条件编译(##IFDEBUG?)封装绘图部分,但这仍然意味着我需要在数据结构代码中包含大量代码(和编译提示)。

同一集合中的分部类?仍然需要参考System.Drawing

还有其他建议吗?

谢谢Ralf

绘制数据结构

这通常是一个难题,但您可以做的一件事是只向绘图代码公开internal成员,这样其他代码就不需要知道它们的存在。您可以使用InternalsVisibleToAttribute创建一个"朋友"程序集,该程序集能够访问另一个程序集的内部成员。然后,可以将图形代码放入第二个部件中,并保持主部件的原始状态。