[英]C# Attribute to modify methods
全部。 也許我沒有足夠的谷歌搜索,但我找不到關於這個問題的任何例子。
是否可以在 C# 中創建一個自定義屬性,該屬性應用於一個類,修改其所有方法? 例如,添加Console.WriteLine("Hello, i'm modified method");
作為第一行(或者如果它是在運行時完成的,它是 IL 等價的)?
是的,你可以這樣做,但不,它不是內置在 C# 中的。 正如 Eric 所說,這種技術被稱為面向切面編程。
我在工作中使用過PostSharp ,它非常有效。 它在編譯時工作,並使用 IL-weaving,而不是其他 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
屬性來控制如何應用方面。 在這個例子中,我想限制它只適用於公共的、非抽象的方法。
你可以做的還有很多,看看(一般是 AOP)。
不。您正在尋找的是面向方面的編程( AOP )。
使用 AOP,您可以指定一個切入點、一個您想要編織代碼的位置以及您想要在該點執行的代碼。 跟蹤是 AOP 的標准示例。 您指定一組方法和編織器/編譯器以在該方法的開頭或結尾添加日志/跟蹤調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.