ALO*_*LOR 2 c# reflection attributes
所有.也许我没有用Google搜索,但我在这个问题上找不到任何例子.
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
您只需将其MyAspect作为属性应用于您的类,它将应用于其中的每个方法.您可以通过修改TargetmemberAttributes属性的MulticastAttributeUsage属性来控制方面的应用方式.在这个例子中,我想将它限制为仅适用于公共的非抽象方法.
你可以做更多的事情看看(一般来说是AOP).
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |