在调用方法之前,要处理信息的自定义属性

本文关键字:处理 信息 自定义属性 调用 方法 | 更新日期: 2023-09-27 18:22:02

在调用方法之前,我已经创建了一个属性来处理一些信息,但它没有被调用。

我想记录一些值,这些值是处理的,并存储在类的静态字段中,这是我的类的其他方法调用的结果。

有人可以指导一下吗?

[AttributeUsage(AttributeTargets.Method)]
internal class MyAttrib : Attribute
{
    public MyAttrib()
    {
        //This is not getting called. what am i missing
        Console.WriteLine("My Attrib called!!");
    }
}
class MyClass
{
    public MyClass()
    {
        Console.WriteLine("Constructor Created");
    }
    [MyAttrib]
    public int Opt1()
    {
        Console.WriteLine("Op1 Performed");
        return 0;
    }

}

static void Main(string[] args)
{
        MyClass cla = new MyClass();
        cla.Opt1();
        cla.Opt2();
        Console.ReadLine();
}

在调用方法之前,要处理信息的自定义属性

属性通常不会在运行时实例化。您可以使用反射来获得哪些属性应用于代码的各个部分(类型、字段等)以及属性的内容。

请阅读MSDN上有关访问属性的此页。具体来说,声明的部分:


属性规范,例如:

[Author("P. Ackerman", version = 1.1)]
class SampleClass

在概念上等同于:

Author anonymousAuthorObject = new Author("P. Ackerman");
anonymousAuthorObject.version = 1.1;

但是,在查询SampleClass的属性之前,代码不会执行。在SampleClass上调用GetCustomAttributes会导致Author对象如上所述进行构造和初始化


您可以做的一件事是有一个基类,您创建的所有其他类都是从该基类派生的。在这个基类的构造函数中,使用反射来标识您感兴趣的类的任何属性或任何其他内容,并对这些信息进行处理。

不过,这实际上并没有解决您关于在执行方法之前处理一些信息的语句。。。我认为这是不可能的。