我可以改变.NET中解析和实例化类型的方式吗?

时间:2008-09-16 20:47:05

标签: .net new-operator

在某些语言中,您可以覆盖“new”关键字来控制实例化类型的方式。你不能直接在.NET中这样做。但是,我想知道是否有办法处理“未找到类型”异常并在“新”修改该类型之前手动解决类型?

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

请不要建议其他序列化方法。

4 个答案:

答案 0 :(得分:5)

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

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

您可以在MSDN

了解更多相关信息

答案 1 :(得分:1)

还可以覆盖AppDomain.TypeResolve事件。

答案 2 :(得分:1)

select isn't broken讨论了如何区别对待 - 错误可能出在您的设计中,而不是您的工具。

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

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

退一步,在更大的环境中查看设计,尝试找到更合理的方法来解决问题。

答案 3 :(得分:-1)

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