4

我在 VB.net (2005) 中有一些类(大约 15 个左右),我希望能够序列化为 xml。不幸的是,它们被标记为朋友类,并且不能暴露在程序集之外。

该程序集是一个 dll,它是 CAD 系统的 com 互操作插件。我已将我所有的班级设置为朋友,这样他们就不会暴露在大会之外以供第 3 方使用。我想知道我是否需要这样做。将类设置为 public 可以让我序列化事情。但是我不希望人们链接到程序集并使用这些类。

我是否应该担心其他程序链接到我的程序集?事实上,我认为这种情况发生的可能性不大。我只是不喜欢让我的几乎所有课程都具有公共范围的想法。

有没有办法让朋友类可序列化?还是我应该把事情公之于众?

干杯,特洛伊

4

2 回答 2

2

这种“保护”无论如何都行不通。人们可以使用反射加载您的程序集,然后使用这些类。因此,不公开课程的理由消失了,这简化了事情。

如果您真的想将类保留在内部,您仍然可以编写自己的序列化代码(完全手动(高效,但需要大量工作)或使用反射),或者您可以提供单独的仅数据类仅用于序列化目的,这可以公开。然后,您只需编写将内部类中的数据导入/导出到序列化类的代码,并且这些类对其他开发人员没有多大用处,因为实际代码在内部类中。

于 2009-09-23T12:49:17.827 回答
1

听起来您是一个受过 Java 培训的人,他正在尝试模仿包功能。我做对了吗?:-)

你不应该让你的班级成为朋友。来吧,让他们公开。如果您希望它们可序列化,那么您实际上是在刺穿违反 Friend(包)可见性的程序集,这就是它们不可序列化的原因。

如果您希望它们有效地私有但可序列化,请查看System.Reflection.BindingFlags.NonPublic标志。您可以使用反射使字段(而不是类)可序列化。

于 2009-09-23T12:46:52.323 回答