在某些语言中,您可以覆盖“new”关键字来控制实例化类型的方式。你不能直接在.NET中这样做。但是,我想知道是否有办法处理“未找到类型”异常并在“新”修改该类型之前手动解决类型?
我正在使用一个读取基于xml的文件的序列化程序,并实例化其中描述的类型。我对序列化程序没有任何控制权,但是我希望与该进程进行交互,希望无需编写自己的appdomain主机。
请不要建议其他序列化方法。
答案 0 :(得分:5)
您可以将事件处理程序附加到AppDomain.CurrentDomain.AssemblyResolve以参与该过程。
您的EventHandler应该返回负责ResolveEventArgs中传递的类型的程序集。
您可以在MSDN
了解更多相关信息答案 1 :(得分:1)
还可以覆盖AppDomain.TypeResolve事件。
答案 2 :(得分:1)
select isn't broken讨论了如何区别对待 - 错误可能出在您的设计中,而不是您的工具。
我认为试图让“新”做其他事情将是错误的做法。
想一想为什么必须谨慎使用运算符重载 - 当语言语义中存在隐藏的变化时,它反直觉且难以调试。
退一步,在更大的环境中查看设计,尝试找到更合理的方法来解决问题。
答案 3 :(得分:-1)
您应该查看Reflection和Activator类。它们允许您从字符串创建对象。当然,该对象必须位于您有权访问的其中一个程序集中。