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

Meh*_*jia 3 .net c# attributes

我已经创建了一个属性来处理一些信息,然后调用一个方法,但它没有被调用.

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

所以有人可以指导它.

[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;
    }
Run Code Online (Sandbox Code Playgroud)

}

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

Ste*_*eve 5

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

在MSDN上阅读有关访问属性的此页面.具体来说,说明的部分:


属性规范如:

[Author("P. Ackerman", version = 1.1)]
class SampleClass
Run Code Online (Sandbox Code Playgroud)

在概念上等同于:

Author anonymousAuthorObject = new Author("P. Ackerman");
anonymousAuthorObject.version = 1.1;
Run Code Online (Sandbox Code Playgroud)

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


您可以做的一件事是拥有一个基类,您创建的所有其他类都来自该基类.在此基类的构造函数中,使用反射来标识您感兴趣的类的任何属性或任何其他内容,并对该信息执行某些操作.

这实际上并没有解决关于在执行方法之前处理某些信息的声明,但是......我不相信这是可能的.

  • "在派生类中,如果未使用base关键字显式调用基类构造函数,则默认构造函数(如果存在)将被隐式调用." - [使用构造函数](http://msdn.microsoft.com/en-us/library/ms173115(v = vs.80).aspx) (2认同)