问题 类级别是否有Conditional属性?


我想在一个类上使用条件属性,或者更重要的是,有什么能够产生这种效果吗?基本上我不希望类在调试模式下存在。我也不想把每个电话都换成一个 #if DEBUG 指示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace NameSpace
{
    [Conditional("Debug")]
    public class ClassName
    {

        public ClassName()
        {
        }
    }
}

1388
2017-09-11 19:22


起源



答案:


不,没有。条件属性不会使它们的目标自行消失 - 它们只是使编译器省略 用户 目标。

Eric Lippert有一个 发表这类事情 今天,它发生了。阅读它,看看它是否对你更有意义。

如果你  需要在发布模式下省略类本身,然后使用预处理器指令 - 但是你也必须对所有调用者也这样做。无论如何,它有什么危害让课程处于发布模式?

这实际上可能是一个不同项目的课程吗?如果是这样, 然后 您可以将条件属性应用于所有方法,然后在发布模式下不需要该类型,因此您可以避免运送程序集。


10
2017-09-11 19:25



那么我可以省略班级的所有用户吗? - Anthony D
如果你把条件放在所有的 方法 该类的所有调用都将被删除,但类本身仍将被构建。 - Jon Skeet
那么类的实例仍然会被创建并使用内存? - Anthony D
不,只有你实施它。 - CodeTherapist


答案:


不,没有。条件属性不会使它们的目标自行消失 - 它们只是使编译器省略 用户 目标。

Eric Lippert有一个 发表这类事情 今天,它发生了。阅读它,看看它是否对你更有意义。

如果你  需要在发布模式下省略类本身,然后使用预处理器指令 - 但是你也必须对所有调用者也这样做。无论如何,它有什么危害让课程处于发布模式?

这实际上可能是一个不同项目的课程吗?如果是这样, 然后 您可以将条件属性应用于所有方法,然后在发布模式下不需要该类型,因此您可以避免运送程序集。


10
2017-09-11 19:25



那么我可以省略班级的所有用户吗? - Anthony D
如果你把条件放在所有的 方法 该类的所有调用都将被删除,但类本身仍将被构建。 - Jon Skeet
那么类的实例仍然会被创建并使用内存? - Anthony D
不,只有你实施它。 - CodeTherapist


不确定,如果我对此有正确的理解。

但是,如果使用ConditionalAttribute修饰所有方法 - 当符号不存在时,将删除所有方法。因此,尽管该类可以使用,但在运行时不会有任何方法可以使用它。

我不确定,为什么你会想要根据符号排除一个类? 你能解释一下情景吗?


0
2017-09-11 19:29