函数属性 C#

Functional Attributes C#

在 C# 中,如何使用属性本身或属性作为某种形式反射的标记来注入代码?

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
public class AddMessage : Attribute
{
    public AddMessage()
    {
        //...
    }
}

例如,使用 AddMessage 你可以从看起来像这样的东西中操纵自动 属性

[AddMessage]
public int Count { get; set; } = 0;

看起来像这样的东西?

private int count;
public int Count {
    get {
        return count;
    }
    set {
        count = value;
        Console.WriteLine("Setter Message");
    }
}

//Somewhere else
count = 0;

您可以尝试 Fody 框架。它的一般方法是根据其中的内容在编译 ("weaving") 后修改您的程序集。我不喜欢它是全部 "meta" 而不是成为代码本身的一部分,但它可以做一些不可能的事情。

Anotar 模块按照您想要执行的操作进行查找,否则您可能会编写自己的模块。