我很想知道.NET是否支持在运行时对方法调用(或属性调用)进行任何形式的动态拦截。也就是说,你是否可以在没有静态编译信息的情况下拦截对象的调用,例如接口(沿着CORBA DII(link text)或COM的IDispatch)。
如果没有,C#4.0中新的“动态类型对象”功能是否有助于此。
答案 0 :(得分:17)
没有任何内置功能可以拦截您无法控制实例化的对象。同样,在即将推出的.net 4.0中也没有新设施。
如果你可以控制实例化:
如果你无法控制实例化
或者,您可以查看一个像IronRuby这样的动态语言,它具有内置的alias_method
和define_method
优点(允许您重新定义任何内容),因此可以进行拦截。
.NET 4.5正在向ReJIT方法引入一种方法,该方法为方法拦截提供了另一个钩子(前提是你没有运行并发/ bg GC并且该方法没有内联)
答案 1 :(得分:2)
答案 2 :(得分:1)
查看.net 4.0动态对象......这可以做到。
http://www.ontheblog.net/CMS/Home/tabid/36/EntryID/77/Default.aspx