Fet*_*lmi 1 .net c# debugging conditional custom-attributes
我们有这个代码:
public static class MyCLass
{
[Conditional("Debugging")]
public static void MyMethod()
{
Console.WriteLine("Example method");
}
}
.
.
.
//In debug mode: Executing Main method in debug mode
MyClass.MyMethod()
Run Code Online (Sandbox Code Playgroud)
我想知道的是条件属性如何改变MyMethod的行为,假设在.NET中Conditional属性定义为:
public class Conditional: Attribute
{
.
.
public string Mode { get; set; )
.
.
public Conditional(string Mode)
{
.
.
this.Mode = Mode;
if (Mode == "Debugging")
{
#ifdef DEBUG
//HOW THE CONDITIONAL CONSTRUCTOR COULD CHANGE THE BEHAVIOUR OF MyMethod
#endif
}
.
.
}
}
Run Code Online (Sandbox Code Playgroud)
如何访问由我的属性(即来自MyAttribute类)修饰的资源(方法,成员,类......)?
该属性告诉编译器查看标志是否已设置,如果不是,则不会编译对该方法的任何调用,就好像方法调用从未在代码中存在一样.您可以通过使用ILSpy等反射器工具轻松地看到它.
所以实际上并不是该属性改变了方法的行为,而是知道寻找该属性并相应地改变其行为的编译器.
归属方法(MyMethod
在您的情况下)仍然是编译的,可以通过反射访问.