gpt4 book ai didi

c# - 虚函数的条件属性

转载 作者:太空狗 更新时间:2023-10-29 23:04:28 27 4
gpt4 key购买 nike

我想知道为什么当您将 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 时,条件语句基本上会造成覆盖方法不存在的情况,因为实际 IL 输出中没有虚函数。然而在我的测试中,无论哪种方式,编译器似乎都能很好地生成代码。条件是否只是抛出函数体的 IL,而不对类签名进行任何实际更改?

最佳答案

我认为这是因为该属性仅通过忽略对该方法的调用来指示该方法不可调用,但该方法确实存在。

编辑:我继续对此进行了一些试验,如果您在 Reflector 中检查以下代码的发布版本,您会注意到对 Test 方法的调用不存在。

 public class TestClass
{
[ConditionalAttribute("DEBUG")]
public static void Test()
{
Console.WriteLine("Blierpie");
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting test");
TestClass.Test();
Console.WriteLine("Finished test");
Console.ReadKey();
}
}

关于c# - 虚函数的条件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com