|
|
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原则和模式可以用来实现接近相同的结果。 |
|
|
JBryanB · 如何从基本抽象类访问类属性 2 年前 |
|
|
Gabe Tucker · 无法在golang中分配接口对象指针 3 年前 |
|
|
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |
|
|
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 7 年前 |
|
|
Randall Flagg · 访问propertyinfo中的属性 7 年前 |
|
|
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 7 年前 |
|
|
tobeypeters · 反射铸造 7 年前 |
|
|
myst02 · 如何在另一个方法之后调用该方法? 7 年前 |