我已经创建了一个属性来处理一些信息,然后调用一个方法,但是没有调用它。
我想记录一些处理过的值并存储在类中的静态字段中,这是因为我的类的其他方法被调用了。
所以有人可以指导它。
[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();
}
答案 0 :(得分:5)
通常不会在运行时实例化属性。您可以使用反射来获取应用于代码的各个部分(类型,字段等)的属性以及属性的内容。
阅读有关访问属性的this page on MSDN。具体来说,说明的部分:
属性规范,例如:
[Author("P. Ackerman", version = 1.1)]
class SampleClass
在概念上等同于:
Author anonymousAuthorObject = new Author("P. Ackerman");
anonymousAuthorObject.version = 1.1;
但是,在查询SampleClass属性之前,不会执行代码。在SampleClass上调用GetCustomAttributes会导致构造并初始化Author对象。
您可以做的一件事是拥有一个基类,您创建的所有其他类都来自该基类。在这个基类的构造函数中,使用反射来标识您感兴趣的类的任何属性或任何其他内容,并对该信息执行某些操作。
这实际上并没有解决关于在执行方法之前处理某些信息的声明,但是......我不相信这是可能的。