我创建了一个简单的属性:
[AttributeUsage(AttributeTargets.Method)]
public class InitAttribute : System.Attribute
{
public InitAttribute()
{
Console.WriteLine("Works!");
}
}
我将其应用于一个简单的方法:
static class Logger
{
public static string _severity;
public static void Init(string severity)
{
_severity = severity;
}
[Init()]
public static void p()
{
Console.WriteLine(_severity);
}
}
发生的事情非常简单。只是,我希望该属性执行一个操作(打印“Works!”),但这不会发生。
此外,打印“Works!”当然只是为了调试目的:我想访问instance的财产_severity
(检查是否是!= null
,例如),但我一直读到的有关属性的所有内容(这对我来说是相当新的)都是关于访问class' 通过反射的方法或属性等。一旦我评估过_severity
,如何修改装饰方法的行为(在这种情况下,引发异常“Logger 未初始化”并且不执行它)?
任何帮助表示赞赏。
如果您需要在控制进入方法时执行操作,您应该查看面向方面的编程和框架,例如后锐利。属性本身并不是为了执行任何操作而设计的。它们只是附加到 IL 程序集中可以在运行时查询的内容的一堆数据(或者元数据,如果您愿意的话)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)