C# 属性修改方法

2024-03-04

全部。也许我在谷歌上搜索得不够,但我找不到关于这个问题的任何例子。

在 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(使用前将#替换为@)

C# 属性修改方法 的相关文章

随机推荐