簡體   English   中英

C#屬性修改方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM