首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Windsor只能拦截虚方法或接口方法?

问为什么Windsor只能拦截虚方法或接口方法?
EN

Stack Overflow用户
提问于 2011-12-20 21:47:54
回答 4查看 1.2K关注 0票数 2

我正在阅读文档,发现如果不使用接口,那么Windsor只能拦截虚拟方法?

这是Windsor的限制,还是仅仅是C#语言的限制?我在寻找一个深入的答案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-20 21:51:45

C#语言在这里完全无关紧要。问题是在运行时级别拦截是如何工作的。

一种技术是继承类/实现接口并将其用作代理。这显然只能覆盖虚方法和接口方法。我怀疑Windsor使用这种技术。这种技术的优点是它不需要任何特殊的东西。只需在运行时创建一个类。

另一种方法是使用分析API。这允许您修改任何方法的IL,包括非虚拟方法。这是更具侵入性的,通常只在测试遗留代码时使用。

另一种方法是在构建时使用IL重写。这可以在您编写的代码中添加拦截点,但不能在框架代码中添加。

票数 4
EN

Stack Overflow用户

发布于 2011-12-20 21:50:54

也不是。Windsor通过子类化工作,你只能明智地重写虚方法--或者实现接口。

其他任何事情都需要调试器/分析器钩子处于活动状态,这很难做到-一些模拟框架支持ti,尽管它们都不是免费的。

票数 2
EN

Stack Overflow用户

发布于 2011-12-20 21:51:19

这是.NET框架的一个限制。Windsor生成一个动态实现,它要么实现接口,要么重写虚拟成员。.NET不允许重写非虚拟成员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8576434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档