为什么我的.NET属性不执行操作?

pis*_*hio 5 c# reflection attributes

我创建了一个简单的属性:

[AttributeUsage(AttributeTargets.Method)]
public class InitAttribute : System.Attribute
{
    public InitAttribute()
    {
        Console.WriteLine("Works!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我将它应用于一个简单的方法:

static class Logger
{
    public static string _severity;

    public static void Init(string severity)
    {
        _severity = severity;
    }

    [Init()]
    public static void p()
    {
        Console.WriteLine(_severity);
    }
}
Run Code Online (Sandbox Code Playgroud)

发生了什么是非常好的前进.只是,我希望该属性执行一个动作(打印Works!),但这不会发生.

上瘾,打印"作品!" 当然只是出于调试目的:我想访问实例的属性_severity(例如,检查是否是!= null),但我一直在阅读的有关属性的内容(对我来说很新)是关于访问的通过反思,的方法或属性等.一旦我评估了_severity,我如何修改修饰方法的行为(在这种情况下,引发异常"Logger未初始化"并且不执行它)?

任何帮助赞赏.

Meh*_*ari 11

如果您需要在控件进入方法时执行操作,您应该查看面向方面的编程和框架,例如PostSharp.属性不是为了自己执行任何操作而设计的.它们只是一堆数据(或元数据,如果你愿意)附加到IL程序集中的东西,可以在运行时查询.

  • 引起用户提出这个问题的一件事是,ASP.Net MVC等框架在ActionFilterAttribute之类的东西中添加了属性钩子的方式,这样它们似乎可以做些什么.这鼓励人们尝试使正常属性更加主动. (9认同)