0

在某些语言中,您可以覆盖“new”关键字来控制类型的实例化方式。您不能直接在 .NET 中执行此操作。但是,我想知道是否有一种方法可以处理“找不到类型”异常并在“新建”该类型的人爆炸之前手动解析类型?

我正在使用一个序列化程序,它读取基于 xml 的文件并实例化其中描述的类型。我对序列化程序没有任何控制权,但我想与该过程进行交互,希望无需编写我自己的 appdomain 主机。

请不要建议替代序列化方法。

4

4 回答 4

5

您可以将事件处理程序附加到 AppDomain.CurrentDomain.AssemblyResolve 以参与该过程。

您的 EventHandler 应返回负责在 ResolveEventArgs 中传递的类型的程序集。

您可以在MSDN上阅读有关它的更多信息

于 2008-09-16T20:50:26.897 回答
1

您还可以覆盖AppDomain.TypeResolve事件。

于 2008-09-16T20:54:58.443 回答
1

select is not broken讨论了如何以不同的方式看待它 - 错误可能出在您的设计中,而不是您的工具上。

我认为试图让“新”去做其他事情是错误的做法。

想想为什么必须谨慎使用运算符重载 - 当语言语义中有隐藏的变化时,它是违反直觉的并且难以调试。

退后一步,在更大的背景下看待设计,尝试找到更明智的方法来解决问题。

于 2008-09-16T20:56:35.163 回答
-1

您应该查看 Reflection 和 Activator 类。它们将允许您从字符串创建对象。当然,该对象必须位于您有权访问的程序集中之一。

于 2008-09-16T20:49:26.290 回答