gpt4 book ai didi

C#属性修改方法

转载 作者:行者123 更新时间:2023-11-30 19:22:09 26 4
gpt4 key购买 nike

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

是否可以在 C# 中创建自定义属性,将其应用于类并修改其所有方法?例如,添加 Console.WriteLine("Hello, i'm modified method"); 作为第一行(或者如果它在运行时完成,它是等效的 IL)?

最佳答案

是的,您可以这样做,但不行,它不是内置于 C# 中的。正如 Eric 所说,这种技术被称为面向方面的编程。

我用过 PostSharp在工作中,它非常有效。它在编译时工作,并使用 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 作为类的属性应用,它就会应用于类中的每个方法。您可以通过修改 MulticastAttributeUsage 属性的 TargetmemberAttributes 属性来控制方面的应用方式。在此示例中,我想将其限制为仅适用于公共(public)的非抽象方法。

还有很多你可以做的,所以看看(一般的 AOP)。

关于C#属性修改方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com