我想知道为什么当你在基类中的虚拟方法上放置System.Diagnostics.Conditional(“DEBUG”)属性时,你不会在派生类上得到编译器错误,覆盖相同的虚拟方法,但在条件不满足时没有条件属性。例如:虚拟功能上的条件属性
public class MyBaseClass
{
[System.Diagnostics.Conditional("DEBUG")]
public virtual void Test()
{
//Do something
}
}
public class MyDerivedClass : MyBaseClass
{
public override void Test()
{
//Do something different
}
}
似乎没有被定义时DEBUG,条件将基本上使一个sitation其中重写方法不能存在,因为在实际的IL输出没有虚函数。然而在我的测试中,编译器似乎无论如何都能生成代码。条件是否仅仅抛出函数体的IL,但不对类签名做任何实际的改变?
切线:将条件属性从基类的虚拟位置重定位到派生类的覆盖会导致编译器错误。考虑到答案中详述的行为,这是有道理的。 – devgeezer 2011-09-07 14:28:21