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

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

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

所以有人可以指导它。

[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(); } 

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

在MSDN上阅读有关访问属性的此页面 。 具体而言,指出的部分:


属性规范如:

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

在概念上等同于:

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

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


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

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