全部。也许我在谷歌上搜索得不够,但我找不到关于这个问题的任何例子。
在 C# 中是否可以创建一个自定义属性,该属性应用于类并修改其所有方法?例如,添加Console.WriteLine("Hello, i'm modified method");
作为第一行(或者如果它是在运行时完成的,则它是等效的 IL)?
是的,您可以执行此操作,但不行,它不是内置于 C# 中的。正如 Eric 所说,这种技术被称为面向方面编程。
我用过后锐利 http://www.postsharp.org/在工作中,而且非常有效。它在编译时工作,并使用 IL 编织,而不是其他 AOP 技术。
例如,以下属性将执行您想要的操作:
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method | MulticastTargets.Class,
AllowMultiple = true,
TargetMemberAttributes = MulticastAttributes.Public |
MulticastAttributes.NonAbstract |
MulticastAttributes.Managed)]
class MyAspect : OnMethodInvocationAspect
{
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
Console.WriteLine("Hello, i'm modified method");
base.OnInvocation(eventArgs);
}
}
您只需申请MyAspect
作为类的属性,它将应用于类中的每个方法。您可以通过修改来控制如何应用方面TargetmemberAttributes
的财产MulticastAttributeUsage
财产。在此示例中,我想将其限制为仅适用于公共非抽象方法。
您还可以做更多事情,请看一下(一般来说,在 AOP 中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)