|
|
1
9
PostSharp 这是一个后编译器,它做一些类似于您描述的事情,使用属性在代码中标记注入点,唯一的区别是它在编译时做。 但您也可以在运行时这样做,而不是通过更改方法体,而是通过使用派生自 ContextBoundObject 它是一个.NET类,允许您截取针对它的所有调用。这里是一个 MSDN Magazine article 描述如何使用ContextBoundObject执行AOP。(检查 NET中的几个方面 文章的一部分) 作为第三种选择,您可以将动态代码生成(reflection.emit或codedom)与属性和虚拟方法结合使用,在可以插入代码的地方动态生成派生类,但这是最痛苦的方法。 编辑: 有第四种选择 .Net unmanaged profiling API 截取方法抖动并在抖动前替换方法体。 这种技术被justmock(telerik)成功地用于模拟、静态方法、非虚拟方法甚至密封类。 |
|
|
2
3
您不能在运行时修改现有的方法,但是您可以动态创建一个带有代码dom的方法并执行它。或者,您可以将代码串合并在一起,在内存中编译并运行它。 我自己也做了后者(一个我允许在内存、运行时编译和执行自定义C代码的应用程序)。 |
|
|
3
2
如果您希望在调用前或调用后添加方面,请查看postsharp: http://www.postsharp.org/ |
|
|
4
1
一 somewhat similar question 之前有人问过(好吧,所以我的解决方案有点相似)。 PostSharp 已经提到了,但也有非常适用的 LinFu article on CodeProject 我在研究这个问题时发现很有趣。 |
|
|
5
0
您是否计划对任意类型执行此操作?我不认为您要用一个属性来修饰这些方法。 考虑到这一点,我认为更好的方法是在一个超类中为您的类型定义抽象方法。超级类上的一个方法可以包含锅炉板方法代码,并通过抽象方法委托给具体的实现,以实现该方法的单个类型的行为。 不过,一般来说,除非您在运行时着手创建代码文件和编译动态程序集,否则无法完成您要做的工作。可能有更多实际的OO原则和模式可以用来实现接近相同的结果。 |
|
|
Brannon · matlab编译为C:检测slbuild与编码器 8 年前 |
|
|
user1804599 · 如何使用funset_avltree库? 9 年前 |
|
|
Å»ubrówka · 更改COM对象的行为 10 年前 |
|
|
user1698814 · 如何打印手写AST? 10 年前 |
|
|
sobek · MATLAB编码器动态调整结构数组大小 11 年前 |